summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortermie <github@anarkystic.com>2011-11-14 15:50:46 -0800
committertermie <github@anarkystic.com>2011-11-14 15:50:46 -0800
commit1335e4c2ea5a9edac23d00a235016d88887fb701 (patch)
tree4a26ac423782fcc486c8e33d80f913e0e9e881b1
parent9d998211529fb6de24d7a62718ad2a850f19557e (diff)
downloadkeystone-1335e4c2ea5a9edac23d00a235016d88887fb701.tar.gz
keystone-1335e4c2ea5a9edac23d00a235016d88887fb701.tar.xz
keystone-1335e4c2ea5a9edac23d00a235016d88887fb701.zip
cli for adding users, tenants, extras
-rwxr-xr-xbin/keystone5
-rwxr-xr-xbin/ksl75
-rw-r--r--etc/default.conf7
-rw-r--r--keystonelight/client.py7
4 files changed, 85 insertions, 9 deletions
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,
}
diff --git a/etc/default.conf b/etc/default.conf
index dc5575d9..176836dd 100644
--- a/etc/default.conf
+++ b/etc/default.conf
@@ -3,19 +3,20 @@ catalog_driver = keystonelight.backends.kvs.KvsCatalog
identity_driver = keystonelight.backends.kvs.KvsIdentity
token_driver = keystonelight.backends.kvs.KvsToken
public_port = 5000
+admin_port = 5001
admin_token = ADMIN
[filter:debug]
paste.filter_factory = keystonelight.wsgi:Debug.factory
[filter:token_auth]
-paste.filter_factory = keystonelight.service:TokenAuthMiddleware.factory
+paste.filter_factory = keystonelight.middleware:TokenAuthMiddleware.factory
[filter:admin_token_auth]
-paste.filter_factory = keystonelight.service:AdminTokenAuthMiddleware.factory
+paste.filter_factory = keystonelight.middleware:AdminTokenAuthMiddleware.factory
[filter:json_body]
-paste.filter_factory = keystonelight.service:JsonBodyMiddleware.factory
+paste.filter_factory = keystonelight.middleware:JsonBodyMiddleware.factory
[app:keystonelight]
paste.app_factory = keystonelight.service:app_factory
diff --git a/keystonelight/client.py b/keystonelight/client.py
index 25128ba3..f5a78c5b 100644
--- a/keystonelight/client.py
+++ b/keystonelight/client.py
@@ -77,9 +77,10 @@ class HttpClient(Client):
if type(body) is type({}):
body = json.dumps(body)
headers = self._build_headers(headers)
- h = httplib.Http()
- resp, content = h.request(path, method=method, headers=headers, body=body)
- return webob.Response(content, status=resp.status, headerlist=resp.headers)
+ h = httplib2.Http()
+ url = '%s%s' % (self.endpoint, path)
+ resp, content = h.request(url, method=method, headers=headers, body=body)
+ return webob.Response(content, status=resp.status, headerlist=resp.items())
class TestClient(Client):