From 1335e4c2ea5a9edac23d00a235016d88887fb701 Mon Sep 17 00:00:00 2001 From: termie Date: Mon, 14 Nov 2011 15:50:46 -0800 Subject: cli for adding users, tenants, extras --- bin/keystone | 5 ++-- bin/ksl | 75 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 77 insertions(+), 3 deletions(-) (limited to 'bin') diff --git a/bin/keystone b/bin/keystone index 8347fe22..f902c31b 100755 --- a/bin/keystone +++ b/bin/keystone @@ -28,7 +28,8 @@ if __name__ == '__main__': conf = len(sys.argv) > 1 and sys.argv[1] or default_conf app = deploy.loadapp('config:%s' % conf) + options = deploy.appconfig('config:%s' % conf) server = wsgi.Server() - server.start(app, int(app.options['public_port'])) - server.start(app, int(app.options['admin_port'])) + server.start(app, int(options['public_port'])) + server.start(app, int(options['admin_port'])) server.wait() diff --git a/bin/ksl b/bin/ksl index e8f2587a..46b89136 100755 --- a/bin/ksl +++ b/bin/ksl @@ -5,9 +5,16 @@ import sys import cli.app import cli.log +from keystonelight import client + DEFAULT_PARAMS = ( - (('--url',), {'dest': 'url', 'action': 'store'}), + (('--config',), {'dest': 'configfile', + 'action': 'store', + 'default': './etc/default.conf'}), + (('--url',), {'dest': 'url', + 'action': 'store', + 'default': 'http://localhost:5000'}), (('--token',), {'dest': 'token', 'action': 'store'}), ) @@ -21,6 +28,20 @@ class BaseApp(cli.log.LoggingApp): for args, kw in DEFAULT_PARAMS: self.add_param(*args, **kw) + def _parse_keyvalues(self, args): + kv = {} + for x in args: + key, value = x.split('=', 1) + # make lists if there are multiple values + if key in kv: + if type(kv) is type(tuple()): + kv[key] = kv[key] + (value,) + else: + kv[key] = (kv[key], value) + else: + kv[key] = value + return kv + class LoadData(BaseApp): def __init__(self, *args, **kw): @@ -33,7 +54,59 @@ class LoadData(BaseApp): pass +class CrudCommands(BaseApp): + ACTION_MAP = {} + + def __init__(self, *args, **kw): + super(CrudCommands, self).__init__(*args, **kw) + self.add_default_params() + self.add_param('action') + self.add_param('keyvalues', nargs='+') + + def main(self): + """Given some keyvalues create the appropriate data in Keystone Light.""" + 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',} + + +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 Light 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, } -- cgit