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 import client as nova_client from sfa.util.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 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, 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 = 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)