summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortermie <github@anarkystic.com>2012-01-09 17:55:33 -0800
committertermie <github@anarkystic.com>2012-01-09 17:55:33 -0800
commit732909a7be4e856f2a5c2a56778a852d42eec6c0 (patch)
tree85f14a0319da5461fe6b06bee9365ae5202be8e9
parent3c88b7f546e727d8ae86901dd62b8230d1d85314 (diff)
downloadkeystone-732909a7be4e856f2a5c2a56778a852d42eec6c0.tar.gz
keystone-732909a7be4e856f2a5c2a56778a852d42eec6c0.tar.xz
keystone-732909a7be4e856f2a5c2a56778a852d42eec6c0.zip
add a db_sync command to bin/ks, remove others
-rw-r--r--.gitignore2
-rwxr-xr-xbin/ks109
-rw-r--r--keystone/backends/sql/core.py6
-rw-r--r--keystone/config.py4
4 files changed, 42 insertions, 79 deletions
diff --git a/.gitignore b/.gitignore
index 4bc32265..3d409835 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,6 @@ run_tests.log
covhtml
pep8.txt
nosetests.xml
-tests/bla.db
+bla.db
docs/build
.DS_Store
diff --git a/bin/ks b/bin/ks
index 4eaceeca..053d1b52 100755
--- a/bin/ks
+++ b/bin/ks
@@ -1,22 +1,27 @@
#!/usr/bin/env python
+import os
import sys
import cli.app
import cli.log
-from keystone import client
+# If ../../keystone/__init__.py exists, add ../ to Python search path, so that
+# it will override what happens to be installed in /usr/(local/)lib/python...
+possible_topdir = os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),
+ os.pardir,
+ os.pardir))
+if os.path.exists(os.path.join(possible_topdir,
+ 'keystone',
+ '__init__.py')):
+ sys.path.insert(0, possible_topdir)
-DEFAULT_PARAMS = (
- (('--config',), {'dest': 'configfile',
- 'action': 'store',
- 'default': './etc/default.conf'}),
- (('--url',), {'dest': 'url',
- 'action': 'store',
- 'default': 'http://localhost:5000'}),
- (('--token',), {'dest': 'token', 'action': 'store'}),
- )
+from keystone import config
+from keystone import utils
+
+
+CONF = config.CONF
class BaseApp(cli.log.LoggingApp):
@@ -43,80 +48,32 @@ class BaseApp(cli.log.LoggingApp):
return kv
-class LoadData(BaseApp):
- def __init__(self, *args, **kw):
- super(LoadData, self).__init__(*args, **kw)
- self.add_default_params()
- self.add_param('fixture', nargs='+')
-
- def main(self):
- """Given some fixtures, create the appropriate data in Keystone."""
- pass
-
-
-class CrudCommands(BaseApp):
- ACTION_MAP = {}
+class DbSync(BaseApp):
+ name = 'db_sync'
def __init__(self, *args, **kw):
- super(CrudCommands, self).__init__(*args, **kw)
- self.add_default_params()
- self.add_param('action')
- self.add_param('keyvalues', nargs='+')
+ super(DbSync, self).__init__(*args, **kw)
def main(self):
- """Given some keyvalues create the appropriate data in Keystone."""
- c = client.HttpClient(self.params.url, token=self.params.token)
- action_name = self.ACTION_MAP[self.params.action]
- kv = self._parse_keyvalues(self.params.keyvalues)
- resp = getattr(c, action_name)(**kv)
- print resp
-
-
-class UserCommands(CrudCommands):
- ACTION_MAP = {'add': 'create_user',
- 'create': 'create_user',
- }
+ for k in ['identity', 'catalog', 'policy', 'token']:
+ driver = utils.import_object(getattr(CONF, k).driver)
+ if hasattr(driver, 'db_sync'):
+ driver.db_sync()
-class TenantCommands(CrudCommands):
- ACTION_MAP = {'add': 'create_tenant',
- 'create': 'create_tenant',
- }
-
-
-class ExtrasCommands(CrudCommands):
- ACTION_MAP = {'add': 'create_extras',
- 'create': 'create_extras',
- }
-
-
-class Auth(BaseApp):
- def __init__(self, *args, **kw):
- super(Auth, self).__init__(*args, **kw)
- self.add_default_params()
- self.add_param('keyvalues', nargs='+')
-
- def main(self):
- """Attempt to authenticate against the Keystone API."""
- c = client.HttpClient(self.params.url, token=self.params.token)
- kv = self._parse_keyvalues(self.params.keyvalues)
- resp = c.authenticate(**kv)
- print resp
-
-
-CMDS = {'loaddata': LoadData,
- 'user': UserCommands,
- 'tenant': TenantCommands,
- 'extras': ExtrasCommands,
- 'auth': Auth,
+CMDS = {'db_sync': DbSync,
}
if __name__ == '__main__':
- if not len(sys.argv) > 1:
- print 'try one of:', ' '.join(CMDS.keys())
- sys.exit(1)
-
- cmd = sys.argv[1]
+ dev_conf = os.path.join(possible_topdir,
+ 'etc',
+ 'keystone.conf')
+ config_files = None
+ if os.path.exists(dev_conf):
+ config_files = [dev_conf]
+
+ args = CONF(config_files=config_files, args=sys.argv)
+ cmd = args[1]
if cmd in CMDS:
- CMDS[cmd](argv=(sys.argv[:1] + sys.argv[2:])).run()
+ CMDS[cmd](argv=(args[:1] + args[2:])).run()
diff --git a/keystone/backends/sql/core.py b/keystone/backends/sql/core.py
index a9a95bbe..5bebf3af 100644
--- a/keystone/backends/sql/core.py
+++ b/keystone/backends/sql/core.py
@@ -12,6 +12,7 @@ import sqlalchemy.engine.url
from keystone import config
from keystone import models
+from keystone.backends.sql import migration
CONF = config.CONF
@@ -198,6 +199,11 @@ class SqlBase(object):
class SqlIdentity(SqlBase):
+ # Internal interface to manage the database
+ def db_sync(self):
+ migration.db_sync()
+
+ # Identity interface
def authenticate(self, user_id=None, tenant_id=None, password=None):
"""Authenticate based on a user, tenant and password.
diff --git a/keystone/config.py b/keystone/config.py
index c2c7a924..796bb9b4 100644
--- a/keystone/config.py
+++ b/keystone/config.py
@@ -6,8 +6,8 @@ from keystone import cfg
class Config(cfg.ConfigOpts):
def __call__(self, config_files=None, *args, **kw):
if config_files is not None:
- self.config_file = config_files
- super(Config, self).__call__(*args, **kw)
+ self._opts['config_file']['opt'].default = config_files
+ return super(Config, self).__call__(*args, **kw)
def __getitem__(self, key, default=None):
return getattr(self, key, default)