setup nova connection in __init__
[plcapi.git] / PLC / Method.py
index 827df54..23edff6 100644 (file)
@@ -16,8 +16,8 @@ from PLC.NovaShell import NovaShell
 from PLC.Faults import *
 from PLC.Parameter import Parameter, Mixed, python_type, xmlrpc_type
 from PLC.Auth import Auth
+from PLC.Timestamp import Timestamp
 from PLC.Debug import profile
-from PLC.Events import Event, Events
 from PLC.Nodes import Node, Nodes
 from PLC.Persons import Person, Persons
 
@@ -64,7 +64,6 @@ w
     def __init__(self, api,caller=None):
         self.name = self.__class__.__name__
         self.api = api
-        self.api.admin_shell = NovaShell()
         self.api.client_shell = None
 
         if caller: 
@@ -321,14 +320,19 @@ w
     def authenticate(self, auth):
 
         # establish nova connection
-        self.api.client_shell = NovaShell(user=auth['Username'],
+        self.api.client_shell = NovaShell(username=auth['Username'],
                                   password=auth['AuthString'],
                                   tenant=auth['Tenant'])
         self.api.client_shell.authenticate()
-        self.caller = self.api.client_shell.keystone.users.find(name=auth['Username'])
+        persons = Persons(self.api, {'email': auth['Username']})
+        if not persons:
+            raise PLCAuthenticationFailure, "Username not found"
+        self.caller = persons[0]
+        keystone_user = self.api.client_shell.keystone.users.find(id=self.caller['keystone_id'])
         self.caller_tenant = self.api.client_shell.keystone.tenants.find(name=auth['Tenant'])
         caller_roles = self.api.client_shell.keystone.roles.roles_for_user(self.caller, self.caller_tenant)
         role_names = [role.name for role in caller_roles] 
+        self.caller['roles'] = role_names 
         if not set(role_names).intersection(self.roles):
             method_message="method %s has roles [%s]"%(self.name,','.join(self.roles))
             person_message="caller %s has roles [%s]"%(self.caller.name,','.join(role_names))