observer now supports remote openstack deployments
diff --git a/planetstack/openstack/client.py b/planetstack/openstack/client.py
index 1a6386d..c6b6b16 100644
--- a/planetstack/openstack/client.py
+++ b/planetstack/openstack/client.py
@@ -13,6 +13,7 @@
has_openstack = False
from planetstack.config import Config
+from deployment_auth import deployment_auth
def require_enabled(callable):
def wrapper(*args, **kwds):
@@ -39,16 +40,22 @@
return opts
class Client:
- def __init__(self, username=None, password=None, tenant=None, url=None, config=None, *args, **kwds):
- if config:
- config = Config(config)
+ def __init__(self, username=None, password=None, tenant=None, url=None, token=None, endpoint=None, deployment=None, *args, **kwds):
+
+
+ if not deployment or deployment not in deployment_auth:
+ auth = deployment_auth['default']
else:
- config = Config()
+ auth = deployment_auth[deployment]
+
+
self.has_openstack = has_openstack
- self.username = config.nova_admin_user
- self.password = config.nova_admin_password
- self.tenant = config.nova_admin_tenant
- self.url = config.nova_url
+ self.username = auth['user']
+ self.password = auth['password']
+ self.tenant = auth['tenant']
+ self.url = auth['url']
+ self.endpoint = auth['endpoint']
+ self.token = auth['token']
if username:
self.username = username
@@ -58,6 +65,10 @@
self.tenant = tenant
if url:
self.url = url
+ if token:
+ self.token = token
+ if endpoint:
+ self.endpoint = endpoint
if '@' in self.username:
self.username = self.username[:self.username.index('@')]
@@ -80,7 +91,10 @@
self.client = keystone_client.Client(username=self.username,
password=self.password,
tenant_name=self.tenant,
- auth_url=self.url)
+ auth_url=self.url,
+ endpoint=self.endpoint,
+ token=self.token
+ )
@require_enabled
def connect(self, *args, **kwds):
diff --git a/planetstack/openstack/driver.py b/planetstack/openstack/driver.py
index 8224c17..174cf85 100644
--- a/planetstack/openstack/driver.py
+++ b/planetstack/openstack/driver.py
@@ -12,37 +12,39 @@
class OpenStackDriver:
- def __init__(self, config = None, client=None):
+ def __init__(self, config = None, client=None, deployment=None):
if config:
self.config = Config(config)
else:
- self.config = Config()
+ self.config = Config()
- self.admin_client = OpenStackClient()
+ self.admin_client = OpenStackClient(deployment=deployment)
self.admin_user = self.admin_client.keystone.users.find(name=self.admin_client.keystone.username)
if client:
self.shell = client
else:
- self.shell = OpenStackClient()
+ self.shell = OpenStackClient(deployment=deployment)
self.enabled = manager_enabled
self.has_openstack = has_openstack
- def client_driver(self, caller=None, tenant=None):
+ def client_driver(self, caller=None, tenant=None, deployment=None):
if caller:
auth = {'username': caller.email,
'password': hashlib.md5(caller.password).hexdigest()[:6],
'tenant': tenant}
- client = OpenStackClient(**auth)
+ client = OpenStackClient(deployment=deployment, **auth)
else:
- client = OpenStackClient(tenant=tenant)
- driver = OpenStackDriver(client=client)
+ client = OpenStackClient(tenant=tenant, deployment=deployment)
+
+ driver = OpenStackDriver(client=client, deployment=deployment)
return driver
- def admin_driver(self, tenant=None):
- client = OpenStackClient(tenant=tenant)
- driver = OpenStackDriver(client=client)
+ def admin_driver(self, tenant=None, deployment=None):
+ client = OpenStackClient(tenant=tenant, deployment=deployment)
+ driver = OpenStackDriver(client=client, deployment=deployment)
+ return driver
def create_role(self, name):
roles = self.shell.keystone.roles.findall(name=name)