implement AddRole()
authorTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 14 Sep 2012 18:26:37 +0000 (14:26 -0400)
committerTony Mack <tmack@paris.CS.Princeton.EDU>
Fri, 14 Sep 2012 18:26:37 +0000 (14:26 -0400)
PLC/Methods/AddRole.py
PLC/Methods/GetRoles.py
PLC/Roles.py

index d42858f..d8b6527 100644 (file)
@@ -15,18 +15,12 @@ class AddRole(Method):
 
     accepts = [
         Auth(),
-        Role.fields['role_id'],
         Role.fields['name']
         ]
 
     returns = Parameter(int, '1 if successful')
 
 
-    def call(self, auth, role_id, name):
-        role = Role(self.api)
-        role['role_id'] = role_id
-        role['name'] = name
-        role.sync(insert = True)
-        self.event_objects = {'Role': [role['role_id']]}
-
+    def call(self, auth, name):
+        self.api.client_shell.keystone.roles.create(name=name) 
         return 1
index 78432d9..d664fcd 100644 (file)
@@ -1,7 +1,7 @@
 from PLC.Faults import *
 from PLC.Method import Method
 from PLC.Parameter import Parameter, Mixed
-from PLC.Roles import Role 
+from PLC.Roles import Role, Roles 
 from PLC.NovaObject import NovaObject
 from PLC.Auth import Auth
 
@@ -19,6 +19,4 @@ class GetRoles(Method):
     returns = [Role.fields]
 
     def call(self, auth):
-        roles = self.api.client_shell.keystone.roles.findall()
-        result = [NovaObject.object_to_dict(role, Role.fields) for role in roles] 
-        return result
+        return Roles(self.api) 
index 869eb96..365c66f 100644 (file)
@@ -1,5 +1,7 @@
-
+from types import StringTypes
+from PLC.Faults import *
 from PLC.Parameter import Parameter
+from PLC.NovaObject import NovaObject
 
 class Role:
     """
@@ -8,9 +10,23 @@ class Role:
     """
 
     fields = {
-        'role_id': Parameter(str, "Role identifier"),
+        'id': Parameter(str, "Role identifier"),
         'name': Parameter(str, "Role", max = 100),
         }
 
 class Roles(list):
-    pass
+
+    def __init__(self, api, role_filter={}):
+        self.api  = api
+        if not role_filter:
+            roles = self.api.client_shell.keystone.roles.findall()
+        elif isinstance(role_filter, StringTypes):
+            [roles] = self.api.client_shell.keystone.roles.find(id=role_filter) 
+        elif isinstance(role_filter, (list, tuple, set)):
+            roles = self.api.client_shell.keystone.roles.findall()
+            roles = [role for role in roles if role.id in rile_filter]
+        else:
+            raise PLCInvalidArgument, "Wrong role filter %r"%role_filter
+
+        for role in roles:
+            self.append(NovaObject.object_to_dict(role, Role.fields))