if __name__ == '__main__':
try:
- conf = config.HeatConfigOpts()
+ conf = config.HeatEngineConfigOpts()
conf()
app = config.load_paste_app(conf)
**kwargs)
-class HeatCacheConfigOpts(HeatConfigOpts):
+class HeatEngineConfigOpts(HeatConfigOpts):
+
+ db_opts = [
+ cfg.StrOpt('db_backend', default='heat.db.anydbm.api', help='The backend to use for db'),
+ ]
def __init__(self, **kwargs):
config_files = cfg.find_config_files(project='heat',
- prog='heat-cache')
- super(HeatCacheConfigOpts, self).__init__(config_files, **kwargs)
-
+ prog='heat-engine')
+ super(HeatEngineConfigOpts, self).__init__(config_files, **kwargs)
+ self.register_cli_opts(self.db_opts)
def setup_logging(conf):
"""
from heat.common import exception
+def import_class(import_str):
+ """Returns a class from a string including module and class."""
+ mod_str, _sep, class_str = import_str.rpartition('.')
+ try:
+ __import__(mod_str)
+ return getattr(sys.modules[mod_str], class_str)
+ except (ImportError, ValueError, AttributeError), exc:
+ #LOG.debug(_('Inner Exception: %s'), exc)
+ raise exception.ClassNotFound(class_name=class_str, exception=exc)
+
+
+def import_object(import_str):
+ """Returns an object including a module or module and class."""
+ try:
+ __import__(import_str)
+ return sys.modules[import_str]
+ except ImportError:
+ cls = import_class(import_str)
+ return cls()
+
+class LazyPluggable(object):
+ """A pluggable backend loaded lazily based on some value."""
+
+ def __init__(self, pivot, **backends):
+ self.__backends = backends
+ self.__pivot = pivot
+ self.__backend = None
+
+ def __get_backend(self):
+ if not self.__backend:
+ backend_name = FLAGS[self.__pivot]
+ if backend_name not in self.__backends:
+ raise exception.Error(_('Invalid backend: %s') % backend_name)
+
+ backend = self.__backends[backend_name]
+ if isinstance(backend, tuple):
+ name = backend[0]
+ fromlist = backend[1]
+ else:
+ name = backend
+ fromlist = backend
+
+ self.__backend = __import__(name, None, None, fromlist)
+ #LOG.debug(_('backend %s'), self.__backend)
+ return self.__backend
+
+ def __getattr__(self, key):
+ backend = self.__get_backend()
+ return getattr(backend, key)
def chunkreadable(iter, chunk_size=65536):
"""
import anydbm
import json
-def event_append(event):
- '''
- EventId The unique ID of this event.
- Timestamp Time the status was updated.
- '''
- name = event['StackName']
- d = anydbm.open('/var/lib/heat/%s.events.db' % name, 'c')
- if d.has_key('lastid'):
- newid = int(d['lastid']) + 1
- else:
- newid = 1
- event['EventId'] = '%d' % newid
- d['lastid'] = event['EventId']
- d[event['EventId']] = json.dumps(event)
+def raw_template_get(context, template_id):
+ return 'test return value'
- d.close()
+def raw_template_get_all(context):
+ pass
+
+def raw_template_create(context, values):
+ pass
+
+
+def parsed_template_get(context, template_id):
+ pass
+
+def parsed_template_get_all(context):
+ pass
+
+def parsed_template_create(context, values):
+ pass
+
+
+def state_get(context, state_id):
+ pass
+def state_get_all(context):
+ pass
-def events_get(stack_id):
+def state_create(context, values):
+ pass
+
+
+def event_get(context, event_id):
+ pass
+
+def event_get_all(context):
+ pass
+
+def event_get_all_by_stack(context, stack_id):
events = {'events': []}
try:
d = anydbm.open('/var/lib/heat/%s.events.db' % stack_id, 'r')
d.close()
return events
+def event_create(context, event):
+ '''
+ EventId The unique ID of this event.
+ Timestamp Time the status was updated.
+ '''
+ name = event['StackName']
+ d = anydbm.open('/var/lib/heat/%s.events.db' % name, 'c')
+ if d.has_key('lastid'):
+ newid = int(d['lastid']) + 1
+ else:
+ newid = 1
+ event['EventId'] = '%d' % newid
+ d['lastid'] = event['EventId']
+ d[event['EventId']] = json.dumps(event)
+
+ d.close()
+
currently the only supported backend.
'''
-from nova import flags
-from nova.openstack.common import cfg
-from nova import utils
-
-
-db_opts = [
- cfg.StrOpt('db_backend', default='db', help='The backend to use for db'),
- ]
-
-FLAGS = flags.FLAGS
-FLAGS.register_opts(db_opts)
-
-IMPL = utils.LazyPluggable('db_backend', db='heat.db.sqlalchemy.api')
+from heat.openstack.common import cfg
+from heat.common import utils
+def configure(conf):
+ global IMPL
+ IMPL = utils.import_object(conf.db_backend)
def raw_template_get(context, template_id):
return IMPL.raw_template_get(context, template_id)
from heat.common import wsgi
from heat.engine import parser
-from heat.engine import simpledb
+from heat.db import api as db_api
logger = logging.getLogger('heat.engine.api.v1.events')
self.conf = conf
def index(self, req, stack_id):
- return simpledb.events_get(stack_id)
+ return db_api.event_get_all_by_stack(None, stack_id)
def create_resource(conf):
"""Events resource factory method."""
from heat.common import wsgi
from heat.engine import parser
+from heat.db import api as db_api
logger = logging.getLogger('heat.engine.api.v1.stacks')
def __init__(self, conf):
self.conf = conf
+ db_api.configure(conf)
def index(self, req, format='json'):
logger.info('format is %s' % format)
import time
from novaclient.v1_1 import client
-from heat.engine import simpledb
+from heat.db import api as db_api
logger = logging.getLogger('heat.engine.resources')
ev['ResourceType'] = self.t['Type']
ev['ResourceProperties'] = self.t['Properties']
- simpledb.event_append(ev)
+ db_api.event_create(None, ev)
self.state = new_state
def stop(self):