1
0
mirror of https://github.com/projectatomic/atomic.git synced 2026-02-07 06:44:52 +01:00
Files
atomic/Atomic/objects/container.py
Brent Baude 2ebeb1decd Fix run behavior
There were bugs in the run behavior in several scenarios:

* running an image with a command
* running a container that is stopped with and without a command
* running a container that is running with and without a command

Closes: #880
Approved by: rhatdan
2017-02-08 00:38:38 +00:00

102 lines
2.6 KiB
Python

from Atomic.util import output_json
import datetime
class Container(object):
def __init__(self, input_name, backend=None):
# Required
self._name = None
self.id = None
self._created = None
self.status = None
self.input_name = input_name
self.original_structure = None
self.deep = False
self._backend = backend
self.runtime = backend.backend
self.image_id = None
self.image_name = None
self._command = None
self.state = None
self.vulnerable = False
self.labels = None
self._user_command = None
# Optional
self.running = False
# Instantiate
self._instantiate()
self.stop_args = None
def _instantiate(self):
self._setup_common()
return self
def _setup_common(self):
# Items common to backends can go here.
pass
def get_label(self, label):
if self.labels:
return self.labels.get(label.lower(), None) or self.labels.get(label.upper(), None)
return None
def dump(self):
# Helper function to dump out known variables in pretty-print style
class_vars = dict(vars(self))
foo = {x: class_vars[x] for x in class_vars if not callable(getattr(self, x)) and not x.startswith('__')
and not x.endswith('_backend')}
output_json(foo)
@property
def backend(self):
return self._backend
@backend.setter
def backend(self, value):
self._backend = value
@property
def type(self):
return 'container'
@property
def created(self):
return str(datetime.datetime.fromtimestamp(self._created))
@property
def created_raw(self):
return self._created
@created.setter
def created(self, value):
self._created = value
@property
def command(self):
cmd = self._command if self._command is not None else ['/bin/sh']
return cmd
@command.setter
def command(self, value):
self._command = value
@property
def interactive(self):
config = self.original_structure['Config']
if all([config.get('AttachStdin', False), config.get('AttachStdout', False), config.get('AttachStderr', False)]):
return True
return False
@property
def name(self):
return str(self._name)
@name.setter
def name(self, value):
self._name = value[1:] if value[0] == '/' else value
@property
def user_command(self):
return self._user_command