mirror of
https://github.com/projectatomic/atomic.git
synced 2026-02-07 06:44:52 +01:00
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
102 lines
2.6 KiB
Python
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
|