summaryrefslogtreecommitdiff
path: root/tests/cloud_tests/images/base.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cloud_tests/images/base.py')
-rw-r--r--tests/cloud_tests/images/base.py68
1 files changed, 36 insertions, 32 deletions
diff --git a/tests/cloud_tests/images/base.py b/tests/cloud_tests/images/base.py
index 394b11ff..0a1e0563 100644
--- a/tests/cloud_tests/images/base.py
+++ b/tests/cloud_tests/images/base.py
@@ -1,65 +1,69 @@
# This file is part of cloud-init. See LICENSE file for license information.
+"""Base class for images."""
+
class Image(object):
- """
- Base class for images
- """
+ """Base class for images."""
+
platform_name = None
- def __init__(self, name, config, platform):
- """
- setup
+ def __init__(self, platform, config):
+ """Set up image.
+
+ @param platform: platform object
+ @param config: image configuration
"""
- self.name = name
- self.config = config
self.platform = platform
+ self.config = config
def __str__(self):
- """
- a brief description of the image
- """
+ """A brief description of the image."""
return '-'.join((self.properties['os'], self.properties['release']))
@property
def properties(self):
- """
- {} containing: 'arch', 'os', 'version', 'release'
- """
+ """{} containing: 'arch', 'os', 'version', 'release'."""
raise NotImplementedError
- # FIXME: instead of having execute and push_file and other instance methods
- # here which pass through to a hidden instance, it might be better
- # to expose an instance that the image can be modified through
- def execute(self, command, stdin=None, stdout=None, stderr=None, env={}):
+ @property
+ def features(self):
+ """Feature flags supported by this image.
+
+ @return_value: list of feature names
"""
- execute command in image, modifying image
+ return [k for k, v in self.config.get('features', {}).items() if v]
+
+ @property
+ def setup_overrides(self):
+ """Setup options that need to be overridden for the image.
+
+ @return_value: dictionary to update args with
"""
+ # NOTE: more sophisticated options may be requied at some point
+ return self.config.get('setup_overrides', {})
+
+ def execute(self, *args, **kwargs):
+ """Execute command in image, modifying image."""
raise NotImplementedError
def push_file(self, local_path, remote_path):
- """
- copy file at 'local_path' to instance at 'remote_path', modifying image
- """
+ """Copy file at 'local_path' to instance at 'remote_path'."""
raise NotImplementedError
- def run_script(self, script):
- """
- run script in image, modifying image
- return_value: script output
+ def run_script(self, *args, **kwargs):
+ """Run script in image, modifying image.
+
+ @return_value: script output
"""
raise NotImplementedError
def snapshot(self):
- """
- create snapshot of image, block until done
- """
+ """Create snapshot of image, block until done."""
raise NotImplementedError
def destroy(self):
- """
- clean up data associated with image
- """
+ """Clean up data associated with image."""
pass
# vi: ts=4 expandtab