From 6072206079cb0cc3c33fb7bce93f9c7424effc46 Mon Sep 17 00:00:00 2001 From: Tony Mack Date: Thu, 2 May 2013 10:57:04 -0400 Subject: [PATCH] sites work when openstack is disabled or unavailable --- plstackapi/core/admin.py | 6 +++--- plstackapi/core/models/site.py | 18 ++---------------- plstackapi/openstack/manager.py | 24 +++++++++++++++++++++++- 3 files changed, 28 insertions(+), 20 deletions(-) diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py index 58f5f58..e332c29 100644 --- a/plstackapi/core/admin.py +++ b/plstackapi/core/admin.py @@ -144,9 +144,9 @@ class SiteAdmin(OSModelAdmin): if obj is None: continue # give inline object access to driver and caller - client = OpenStackClient(tenant=request.user.site.login_base, **request.session.get('auth', {})) - inline.model.driver = OpenStackDriver(client=client) - inline.model.caller = request.user + auth = request.session.get('auth', {}) + auth['tenant'] = request.user.site.login_base + inline.model.os_manager = OpenStackManager(auth=auth, caller=request.user) yield inline.get_formset(request, obj) class SitePrivilegeAdmin(PlanetStackBaseAdmin): diff --git a/plstackapi/core/models/site.py b/plstackapi/core/models/site.py index 76cc0a4..2c60e16 100644 --- a/plstackapi/core/models/site.py +++ b/plstackapi/core/models/site.py @@ -21,26 +21,12 @@ class Site(PlCoreBase): def __unicode__(self): return u'%s' % (self.name) def save(self, *args, **kwds): - if not self.tenant_id: - tenant = self.driver.create_tenant(tenant_name=self.login_base, - description=self.name, - enabled=self.enabled) - self.tenant_id = tenant.id - # give caller an admin role at the tenant they've created - self.driver.add_user_role(self.caller.user_id, tenant.id, 'admin') - - # update the record - if self.id: - self.driver.update_tenant(self.tenant_id, - description=self.name, - enabled=self.enabled) - + self.os_manager.save_site(self) super(Site, self).save(*args, **kwds) def delete(self, *args, **kwds): - if self.tenant_id: - self.driver.delete_tenant(self.tenant_id) + self.os_manager.delete_site(self) super(Site, self).delete(*args, **kwds) diff --git a/plstackapi/openstack/manager.py b/plstackapi/openstack/manager.py index 79403a8..9cf7652 100644 --- a/plstackapi/openstack/manager.py +++ b/plstackapi/openstack/manager.py @@ -28,7 +28,7 @@ class OpenStackManager: self.client = OpenStackClient(**auth) self.driver = OpenStackDriver(client=self.client) - self.caller=None + self.caller=caller @require_enabled def save_role(self, role): @@ -70,6 +70,28 @@ class OpenStackManager: if user.user_id: self.driver.delete_user(user.user_id) + + + @require_enabled + def save_site(self, site): + if not site.tenant_id: + tenant = self.driver.create_tenant(tenant_name=site.login_base, + description=site.name, + enabled=site.enabled) + site.tenant_id = tenant.id + # give caller an admin role at the tenant they've created + self.driver.add_user_role(self.caller.user_id, tenant.id, 'admin') + + # update the record + if site.id and site.tenant_id: + self.driver.update_tenant(site.tenant_id, + description=site.name, + enabled=site.enabled) + + @require_enabled + def delete_site(self, site): + if site.tenant_id: + self.driver.delete_tenant(site.tenant_id) def refresh_nodes(self): # collect local nodes -- 2.43.0