From: Tony Mack Date: Tue, 26 Mar 2013 17:22:32 +0000 (-0400) Subject: initial checkin X-Git-Tag: 1.0~331 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=9d0ae4b262b178ce8531e3d54ab4822e6703dd3d;p=plstackapi.git initial checkin --- diff --git a/plstackapi/openstack/__init__.py b/plstackapi/openstack/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/plstackapi/openstack/shell.py b/plstackapi/openstack/shell.py new file mode 100644 index 0000000..5f11778 --- /dev/null +++ b/plstackapi/openstack/shell.py @@ -0,0 +1,119 @@ +from keystoneclient.v2_0 import client as keystone_client +from glance import client as glance_client +from novaclient.v1_1 import client as nova_client +from quantumclient.v2_0 import client as quantum_client + +from plstackapi.planetstack.config import Config + +def parse_novarc(filename): + opts = {} + f = open(filename, 'r') + for line in f: + try: + line = line.replace('export', '').strip() + parts = line.split('=') + if len(parts) > 1: + value = parts[1].replace("\'", "") + value = value.replace('\"', '') + opts[parts[0]] = value + except: + pass + f.close() + return opts + +class Client: + def __init__(self, username=None, password=None, tenant=None, url=None, config=None, *args, **kwds): + if config: + config = Config(config) + else: + config = Config() + self.username = config.nova_admin_user + self.password = config.nova_admin_password + self.tenant = config.nova_admin_tenant + self.url = config.nova_url + + if username: + self.username = username + if password: + self.password = password + if tenant: + self.tenant = tenant + if url: + self.url = url + + if '@' in self.username: + self.username = self.username[:self.username.index('@')] + +class KeystoneClient(Client): + def __init__(self, *args, **kwds): + Client.__init__(self, *args, **kwds) + self.client = keystone_client.Client(username=self.username, + password=self.password, + tenant_name=self.tenant, + auth_url=self.url) + + def connect(self, *args, **kwds): + self.__init__(*args, **kwds) + + def __getattr__(self, name): + return getattr(self.client, name) + + +class GlanceClient(Client): + def __init__(self, *args, **kwds): + Client.__init__(self, *args, **kwds) + self.client = glance_client.get_client(host='0.0.0.0', + username=self.username, + password=self.password, + tenant=self.tenant, + auth_url=self.url) + def __getattr__(self, name): + return getattr(self.client, name) + +class NovaClient(Client): + def __init__(self, *args, **kwds): + Client.__init__(self, *args, **kwds) + self.client = nova_client.Client(username=self.username, + api_key=self.password, + project_id=self.tenant, + auth_url=self.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) + +class QuantumClient(Client): + def __init__(self, *args, **kwds): + Client.__init__(self, *args, **kwds) + self.client = quantum_client.Client(username=self.username, + password=self.password, + tenant_name=self.tenant, + auth_url=self.url) + def connect(self, *args, **kwds): + self.__init__(*args, **kwds) + + def __getattr__(self, name): + return getattr(self.client, name) + +class OpenStackShell: + """ + A simple native shell to the openstack backend services. + This class can receive all nova calls to the underlying testbed + """ + + def __init__ ( self, *args, **kwds) : + # instantiate managers + self.keystone = KeystoneClient(*args, **kwds) + self.glance = GlanceClient(*args, **kwds) + self.nova = NovaClient(*args, **kwds) + self.quantum = QuantumClient(*args, **kwds) + + def authenticate(self): + return self.keystone.authenticate()