diff options
| author | Ziad Sawalha <github@highbridgellc.com> | 2011-06-14 23:33:57 -0500 |
|---|---|---|
| committer | Ziad Sawalha <github@highbridgellc.com> | 2011-06-14 23:33:57 -0500 |
| commit | ffd23970d416e1e8eab3dbe6daecd80ed81c2be1 (patch) | |
| tree | b34c09cd6469010baa2c66b05cf6ca30ab897e87 | |
| parent | 610e997fe665715a463177141c61b79f0df2e217 (diff) | |
| download | keystone-ffd23970d416e1e8eab3dbe6daecd80ed81c2be1.tar.gz keystone-ffd23970d416e1e8eab3dbe6daecd80ed81c2be1.tar.xz keystone-ffd23970d416e1e8eab3dbe6daecd80ed81c2be1.zip | |
Support for GET /v2.0/users and add cdn back to sampledata for v1.0 support
| -rwxr-xr-x | bin/sampledata.sh | 3 | ||||
| -rwxr-xr-x | etc/keystone.conf | 2 | ||||
| -rwxr-xr-x | keystone/db/sqlalchemy/api.py | 51 | ||||
| -rwxr-xr-x | keystone/logic/service.py | 25 | ||||
| -rwxr-xr-x | keystone/server.py | 11 |
5 files changed, 89 insertions, 3 deletions
diff --git a/bin/sampledata.sh b/bin/sampledata.sh index 2309aecc..d8544ec0 100755 --- a/bin/sampledata.sh +++ b/bin/sampledata.sh @@ -27,7 +27,7 @@ # Users ./keystone-manage $* user add joeuser secrete 1234 ./keystone-manage $* user add joeadmin secrete 1234 -./keystone-manage $* user add admin secrete 1234 +./keystone-manage $* user add admin secrete ./keystone-manage $* user add disabled secrete 1234 ./keystone-manage $* user disable disabled @@ -40,6 +40,7 @@ #BaseURLs ./keystone-manage $* baseURLs add ZONE1 swift http://localhost:8888/v1/AUTH_%tenant_id% admin.swift.local internal.swift.local 1 ./keystone-manage $* baseURLs add ZONE1 nova http://localhost:8008/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% 1 +./keystone-manage $* baseURLs add ZONE1 cdn http://localhost:8080/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% https://api.openstack.local/v1.1/%tenant_id% 1 # Groups #./keystone-manage $* group add Admin 1234 diff --git a/etc/keystone.conf b/etc/keystone.conf index 259e3ef3..db0eeb44 100755 --- a/etc/keystone.conf +++ b/etc/keystone.conf @@ -27,7 +27,7 @@ sql_connection = sqlite:///../keystone/keystone.db sql_idle_timeout = 30 #Dictionary Maps every service to a header.Missing services would get header X_(SERVICE_NAME) Key => Service Name, Value => Header Name -service-header-mappings = {'nova' : 'X-Server-Management-Url' , 'swift' : 'X-Storage-Url', 'CDN' : 'X-CDN-Management-Url'} +service-header-mappings = {'nova' : 'X-Server-Management-Url' , 'swift' : 'X-Storage-Url', 'cdn' : 'X-CDN-Management-Url'} # Address to bind the API server #TODO Properties defined within app not available via pipeline.Till then server props stay outside. diff --git a/keystone/db/sqlalchemy/api.py b/keystone/db/sqlalchemy/api.py index df1d4d4e..9341954b 100755 --- a/keystone/db/sqlalchemy/api.py +++ b/keystone/db/sqlalchemy/api.py @@ -488,6 +488,57 @@ def user_get(id, session=None): return result +def user_get_page(marker, limit, session=None): + if not session: + session = get_session() + + if marker: + return session.query(models.User).filter("id>:marker").params(\ + marker='%s' % marker).order_by(\ + models.User.id.desc()).limit(limit).all() + else: + return session.query(models.User).order_by(\ + models.User.id.desc()).limit(limit).all() + + +def user_get_page_markers(marker, limit, session=None): + if not session: + session = get_session() + first = session.query(models.User).order_by(\ + models.User.id).first() + last = session.query(models.User).order_by(\ + models.User.id.desc()).first() + if first is None: + return (None, None) + if marker is None: + marker = first.id + next = session.query(models.User).filter("id > :marker").params(\ + marker='%s' % marker).order_by(\ + models.User.id).limit(limit).all() + prev = session.query(models.User).filter("id < :marker").params(\ + marker='%s' % marker).order_by(\ + models.User.id.desc()).limit(int(limit)).all() + if len(next) == 0: + next = last + else: + for t in next: + next = t + if len(prev) == 0: + prev = first + else: + for t in prev: + prev = t + if prev.id == marker: + prev = None + else: + prev = prev.id + if next.id == last.id: + next = None + else: + next = next.id + return (prev, next) + + def user_get_email(email, session=None): if not session: session = get_session() diff --git a/keystone/logic/service.py b/keystone/logic/service.py index ba40d247..4030e06b 100755 --- a/keystone/logic/service.py +++ b/keystone/logic/service.py @@ -210,7 +210,6 @@ class IdentityService(object): # # Tenant Group Operations # - def create_tenant_group(self, admin_token, tenant, group): self.__validate_token(admin_token) @@ -511,6 +510,30 @@ class IdentityService(object): return users.User_Update(None, duser.id, duser.tenant_id, duser.email, duser.enabled, ts) + ## + ## GET Users with Pagination + ## + def get_users(self, admin_token, marker, limit, url): + (token, user) = self.__validate_token(admin_token) + # If Global admin return all tenants. + us = [] + dusers = db_api.user_get_page(marker, limit) + for duser in dusers: + us.append(users.User(None, + duser.id, + duser.tenant_id, + duser.email, + duser.enabled)) + prev, next = db_api.user_get_page_markers(marker, limit) + links = [] + if prev: + links.append(atom.Link('prev', "%s?'marker=%s&limit=%s'" \ + % (url, prev, limit))) + if next: + links.append(atom.Link('next', "%s?'marker=%s&limit=%s'" \ + % (url, next, limit))) + return users.Users(us, links) + def update_user(self, admin_token, user_id, user): self.__validate_token(admin_token) diff --git a/keystone/server.py b/keystone/server.py index 1e481311..e58185d1 100755 --- a/keystone/server.py +++ b/keystone/server.py @@ -285,6 +285,13 @@ class UserController(wsgi.Controller): user)) @utils.wrap_error + def get_users(self, req): + marker, limit, url = get_marker_limit_and_url(req) + users = service.get_users(utils.get_auth_token(req), marker, + limit, url) + return utils.send_result(200, req, users) + + @utils.wrap_error def get_user(self, req, user_id): user = service.get_user(utils.get_auth_token(req), user_id) return utils.send_result(200, req, user) @@ -653,6 +660,10 @@ class KeystoneAdminAPI(wsgi.Router): controller=user_controller, action="create_user", conditions=dict(method=["PUT"])) + mapper.connect("/v2.0/users", + controller=user_controller, + action="get_users", + conditions=dict(method=["GET"])) mapper.connect("/v2.0/users/{user_id}", controller=user_controller, action="get_user", |
