summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJulien Danjou <julien@danjou.info>2014-09-30 17:01:04 +0200
committerJulien Danjou <julien@danjou.info>2014-10-01 12:32:06 +0200
commit72d6cf7fc4a070dbf000fd722b59e54f09a833d3 (patch)
tree86174995f674ef82159f74846cff6e93ee77f2d9
parentadba8b3ca379c4f1ec4b8be16096d94b38b3e4df (diff)
downloadironic-72d6cf7fc4a070dbf000fd722b59e54f09a833d3.tar.gz
Replace custom lazy loading by stevedore
Change-Id: I0b09e8822af6e8c3ce7299d31eb53f30a50262bc
-rw-r--r--ironic/common/utils.py35
-rw-r--r--ironic/db/migration.py29
-rw-r--r--setup.cfg3
3 files changed, 21 insertions, 46 deletions
diff --git a/ironic/common/utils.py b/ironic/common/utils.py
index bd07a8c00..4c6443f65 100644
--- a/ironic/common/utils.py
+++ b/ironic/common/utils.py
@@ -145,41 +145,6 @@ def random_alnum(size=32):
return ''.join(random.choice(characters) for _ in range(size))
-class LazyPluggable(object):
- """A pluggable backend loaded lazily based on some value."""
-
- def __init__(self, pivot, config_group=None, **backends):
- self.__backends = backends
- self.__pivot = pivot
- self.__backend = None
- self.__config_group = config_group
-
- def __get_backend(self):
- if not self.__backend:
- if self.__config_group is None:
- backend_name = CONF[self.__pivot]
- else:
- backend_name = CONF[self.__config_group][self.__pivot]
- if backend_name not in self.__backends:
- msg = _('Invalid backend: %s') % backend_name
- raise exception.IronicException(msg)
-
- 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)
- return self.__backend
-
- def __getattr__(self, key):
- backend = self.__get_backend()
- return getattr(backend, key)
-
-
def delete_if_exists(pathname):
"""delete a file, but ignore file not found error."""
diff --git a/ironic/db/migration.py b/ironic/db/migration.py
index d5c0fcf10..cef46860b 100644
--- a/ironic/db/migration.py
+++ b/ironic/db/migration.py
@@ -16,34 +16,41 @@
"""Database setup and migration commands."""
-from ironic.common import utils
+from oslo.config import cfg
+from stevedore import driver
-IMPL = utils.LazyPluggable(
- pivot='backend',
- config_group='database',
- sqlalchemy='ironic.db.sqlalchemy.migration')
+_IMPL = None
+
+
+def get_backend():
+ global _IMPL
+ if not _IMPL:
+ cfg.CONF.import_opt('backend', 'oslo.db.options', group='database')
+ _IMPL = driver.DriverManager("ironic.database.migration_backend",
+ cfg.CONF.database.backend).driver
+ return _IMPL
def upgrade(version=None):
"""Migrate the database to `version` or the most recent version."""
- return IMPL.upgrade(version)
+ return get_backend().upgrade(version)
def downgrade(version=None):
- return IMPL.downgrade(version)
+ return get_backend().downgrade(version)
def version():
- return IMPL.version()
+ return get_backend().version()
def stamp(version):
- return IMPL.stamp(version)
+ return get_backend().stamp(version)
def revision(message, autogenerate):
- return IMPL.revision(message, autogenerate)
+ return get_backend().revision(message, autogenerate)
def create_schema():
- return IMPL.create_schema()
+ return get_backend().create_schema()
diff --git a/setup.cfg b/setup.cfg
index dcb3a33c9..5133398c4 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -60,6 +60,9 @@ ironic.drivers =
pxe_drac = ironic.drivers.drac:PXEDracDriver
pxe_snmp = ironic.drivers.pxe:PXEAndSNMPDriver
+ironic.database.migration_backend =
+ sqlalchemy = ironic.db.sqlalchemy.migration
+
[pbr]
autodoc_index_modules = True