bootstrap-vz/base/manifest.py

48 lines
1.4 KiB
Python
Raw Normal View History

2013-06-09 20:29:54 +02:00
import logging
log = logging.getLogger(__name__)
def load_manifest(path):
from json import load
data = load(open(path))
2013-06-09 18:26:36 +02:00
provider = __import__('providers.{module}'.format(module=data['provider']), fromlist=['providers'])
manifest = provider.Manifest(path)
2013-05-02 19:13:35 +02:00
manifest.validate(data)
manifest.parse(data)
manifest.load_plugins()
return (provider, manifest)
2013-05-02 19:13:35 +02:00
class Manifest(object):
def __init__(self, path):
2013-05-02 19:13:35 +02:00
self.path = path
def validate(self, data, schema_path=None):
if schema_path is not None:
from json import load
from json_schema_validator.validator import Validator
from json_schema_validator.schema import Schema
from json_schema_validator.errors import ValidationError
schema = Schema(load(open(schema_path)))
try:
Validator.validate(schema, data)
except ValidationError as e:
from common.exceptions import ManifestError
raise ManifestError(e.message, self)
2013-05-02 19:13:35 +02:00
def parse(self, data):
self.provider = data['provider']
self.volume = data['volume']
self.system = data['system']
self.plugins = data['plugins']
2013-05-02 19:13:35 +02:00
2013-05-16 08:00:28 +02:00
def load_plugins(self):
self.loaded_plugins = []
for modname in self.plugins.keys():
if self.plugins[modname]['enabled']:
2013-06-09 20:29:54 +02:00
plugin_name = 'plugins.{module}'.format(module=modname)
plugin = __import__(plugin_name, fromlist=['plugins'])
log.debug('Loaded plugin %s', plugin_name)
2013-05-16 08:00:28 +02:00
self.loaded_plugins.append(plugin)