cli for adding users, tenants, extras
This commit is contained in:
parent
9d99821152
commit
1335e4c2ea
|
@ -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()
|
||||
|
|
75
bin/ksl
75
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,
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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):
|
||||
|
|
Loading…
Reference in New Issue