diff options
author | Jhon Honce <jhonce@redhat.com> | 2018-07-12 19:26:14 -0700 |
---|---|---|
committer | Jhon Honce <jhonce@redhat.com> | 2018-07-13 12:50:12 -0700 |
commit | 74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15 (patch) | |
tree | 75ba256d70545d79aa61d7c57c20df886be1555f /contrib/python/podman/libs/containers.py | |
parent | 44b523c946c88e540b50d7ba59f441b5f8e0bad0 (diff) | |
download | podman-74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15.tar.gz podman-74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15.tar.bz2 podman-74ccd9ce5f29a1df4ffe70b4d8bd00c29d5d9d15.zip |
Update python directories to better support setup.py
Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'contrib/python/podman/libs/containers.py')
-rw-r--r-- | contrib/python/podman/libs/containers.py | 245 |
1 files changed, 0 insertions, 245 deletions
diff --git a/contrib/python/podman/libs/containers.py b/contrib/python/podman/libs/containers.py deleted file mode 100644 index 6dc2c141e..000000000 --- a/contrib/python/podman/libs/containers.py +++ /dev/null @@ -1,245 +0,0 @@ -"""Models for manipulating containers and storage.""" -import collections -import functools -import getpass -import json -import signal -import time - -from ._containers_attach import Mixin as AttachMixin -from ._containers_start import Mixin as StartMixin - - -class Container(AttachMixin, StartMixin, collections.UserDict): - """Model for a container.""" - - def __init__(self, client, id, data): - """Construct Container Model.""" - super(Container, self).__init__(data) - - self._client = client - self._id = id - - with client() as podman: - self._refresh(podman) - - assert self._id == self.data['id'],\ - 'Requested container id({}) does not match store id({})'.format( - self._id, self.id - ) - - def __getitem__(self, key): - """Get items from parent dict.""" - return super().__getitem__(key) - - def _refresh(self, podman): - ctnr = podman.GetContainer(self._id) - super().update(ctnr['container']) - - for k, v in self.data.items(): - setattr(self, k, v) - if 'containerrunning' in self.data: - setattr(self, 'running', self.data['containerrunning']) - self.data['running'] = self.data['containerrunning'] - - return self - - def refresh(self): - """Refresh status fields for this container.""" - with self._client() as podman: - return self._refresh(podman) - - def processes(self): - """Show processes running in container.""" - with self._client() as podman: - results = podman.ListContainerProcesses(self.id) - yield from results['container'] - - def changes(self): - """Retrieve container changes.""" - with self._client() as podman: - results = podman.ListContainerChanges(self.id) - return results['container'] - - def kill(self, signal=signal.SIGTERM, wait=25): - """Send signal to container. - - default signal is signal.SIGTERM. - wait n of seconds, 0 waits forever. - """ - with self._client() as podman: - podman.KillContainer(self.id, signal) - timeout = time.time() + wait - while True: - self._refresh(podman) - if self.status != 'running': - return self - - if wait and timeout < time.time(): - raise TimeoutError() - - time.sleep(0.5) - - def _lower_hook(self): - """Convert all keys to lowercase.""" - - @functools.wraps(self._lower_hook) - def wrapped(input): - return {k.lower(): v for (k, v) in input.items()} - - return wrapped - - def inspect(self): - """Retrieve details about containers.""" - with self._client() as podman: - results = podman.InspectContainer(self.id) - obj = json.loads(results['container'], object_hook=self._lower_hook()) - return collections.namedtuple('ContainerInspect', obj.keys())(**obj) - - def export(self, target): - """Export container from store to tarball. - - TODO: should there be a compress option, like images? - """ - with self._client() as podman: - 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 stop(self, timeout=25): - """Stop container, return id on success.""" - with self._client() as podman: - podman.StopContainer(self.id, timeout) - return self._refresh(podman) - - def remove(self, force=False): - """Remove container, return id on success. - - force=True, stop running container. - """ - with self._client() as podman: - results = podman.RemoveContainer(self.id, force) - return results['container'] - - def restart(self, timeout=25): - """Restart container with timeout, return id on success.""" - with self._client() as podman: - podman.RestartContainer(self.id, timeout) - return self._refresh(podman) - - def rename(self, target): - """Rename container, return id on success.""" - with self._client() as podman: - # TODO: Need arguments - results = podman.RenameContainer() - # TODO: fixup objects cached information - return results['container'] - - def resize_tty(self, width, height): - """Resize container tty.""" - with self._client() as podman: - # TODO: magic re: attach(), arguments - podman.ResizeContainerTty() - - def pause(self): - """Pause container, return id on success.""" - with self._client() as podman: - podman.PauseContainer(self.id) - return self._refresh(podman) - - def unpause(self): - """Unpause container, return id on success.""" - with self._client() as podman: - podman.UnpauseContainer(self.id) - return self._refresh(podman) - - def update_container(self, *args, **kwargs): - """TODO: Update container..., return id on success.""" - with self._client() as podman: - podman.UpdateContainer() - return self._refresh(podman) - - def wait(self): - """Wait for container to finish, return 'returncode'.""" - with self._client() as podman: - results = podman.WaitContainer(self.id) - return int(results['exitcode']) - - def stats(self): - """Retrieve resource stats from the container.""" - with self._client() as podman: - results = podman.GetContainerStats(self.id) - obj = results['container'] - return collections.namedtuple('StatDetail', obj.keys())(**obj) - - def logs(self, *args, **kwargs): - """Retrieve container logs.""" - with self._client() as podman: - results = podman.GetContainerLogs(self.id) - yield from results - - -class Containers(object): - """Model for Containers collection.""" - - def __init__(self, client): - """Construct model for Containers collection.""" - self._client = client - - def list(self): - """List of containers in the container store.""" - with self._client() as podman: - results = podman.ListContainers() - for cntr in results['containers']: - yield Container(self._client, cntr['id'], cntr) - - def delete_stopped(self): - """Delete all stopped containers.""" - with self._client() as podman: - results = podman.DeleteStoppedContainers() - return results['containers'] - - def get(self, id): - """Retrieve container details from store.""" - with self._client() as podman: - cntr = podman.GetContainer(id) - return Container(self._client, cntr['container']['id'], - cntr['container']) |