basestring -> StringType
[sfa.git] / sfa / openstack / client.py
index 11d9221..215d333 100644 (file)
@@ -1,6 +1,7 @@
 from sfa.util.sfalogging import logger
+from keystoneclient.v2_0 import client as keystone_client
 from glance import client as glance_client
-from novaclient.v1_1.client import Client
+from novaclient.v1_1 import client as nova_client
 from sfa.util.config import Config
 
 
@@ -21,40 +22,71 @@ def parse_novarc(filename):
     return opts
 
 
+class KeystoneClient:
+    def __init__(self, username=None, password=None, tenant=None, url=None, config=None):
+        if not config:
+            config = Config()
+        opts = parse_novarc(config.SFA_NOVA_NOVARC)
+        if username:
+            opts['OS_USERNAME'] = username
+        if password:
+            opts['OS_PASSWORD'] = password
+        if tenant:
+            opts['OS_TENANT_NAME'] = tenant
+        if url:
+            opts['OS_AUTH_URL'] = url
+        self.opts = opts 
+        self.client = keystone_client.Client(username=opts.get('OS_USERNAME'),
+                                             password=opts.get('OS_PASSWORD'),
+                                             tenant_name=opts.get('OS_TENANT_NAME'),
+                                             auth_url=opts.get('OS_AUTH_URL'))
+
+    def connect(self, *args, **kwds):
+        self.__init__(*args, **kwds)
+   
+    def __getattr__(self, name):
+        return getattr(self.client, name) 
+
+
 class GlanceClient:
     def __init__(self, config=None):
         if not config:
             config = Config()
         opts = parse_novarc(config.SFA_NOVA_NOVARC)
-
         self.client = glance_client.get_client(host='0.0.0.0',
                                                username=opts.get('OS_USERNAME'),
                                                password=opts.get('OS_PASSWORD'),
                                                tenant=opts.get('OS_TENANT_NAME'),
                                                auth_url=opts.get('OS_AUTH_URL'))
-
     def __getattr__(self, name):
         return getattr(self.client, name)
 
-
 class NovaClient:
-    def __init__(self, config=None):
+    def __init__(self, username=None, password=None, tenant=None, url=None, config=None):
         if not config:
             config = Config()
         opts = parse_novarc(config.SFA_NOVA_NOVARC)
-        
-        self.client = Client(username=opts.get('OS_USERNAME'),
-                             api_key=opts.get('OS_PASSWORD'),
-                             project_id=opts.get('OS_TENANT_NAME'),
-                             auth_url=opts.get('OS_AUTH_URL'),
-                             region_name='',
-                             extensions=[],
-                             service_type='compute',
-                             service_name='',  
-                            )
-                              
+        if username:
+            opts['OS_USERNAME'] = username
+        if password:
+            opts['OS_PASSWORD'] = password
+        if tenant:
+            opts['OS_TENANT_NAME'] = tenant
+        if url:
+            opts['OS_AUTH_URL'] = url
+        self.opts = opts
+        self.client = nova_client.Client(username=opts.get('OS_USERNAME'),
+                                         api_key=opts.get('OS_PASSWORD'),
+                                         project_id=opts.get('OS_TENANT_NAME'),
+                                         auth_url=opts.get('OS_AUTH_URL'),
+                                         region_name='',
+                                         extensions=[],
+                                         service_type='compute',
+                                         service_name='',  
+                                         )
 
+    def connect(self, *args, **kwds):
+        self.__init__(*args, **kwds)
+                              
     def __getattr__(self, name):
-        return getattr(self.client, name)
-
-                            
+        return getattr(self.client, name)