SitePrivilege and SliceMembership linked to tenant roles
diff --git a/plstackapi/core/models.py b/plstackapi/core/models.py
index fd679df..e4e3408 100644
--- a/plstackapi/core/models.py
+++ b/plstackapi/core/models.py
@@ -12,6 +12,12 @@
class Meta:
abstract = True
+ def save(self):
+ if not self.id:
+ self.created = datetime.date.today()
+ self.updated = datetime.datetime.today()
+ super(PlCoreBase, self).save()
+
class Role(PlCoreBase):
ROLE_CHOICES = (('admin', 'Admin'), ('pi', 'Principle Investigator'), ('user','User'))
@@ -62,17 +68,28 @@
firstname = models.CharField(help_text="person's given name", max_length=200)
lastname = models.CharField(help_text="person's surname", max_length=200)
email = models.EmailField(help_text="e-mail address")
- phone = models.CharField(help_text="phone number contact", max_length=100)
- user_url = models.URLField()
+ phone = models.CharField(null=True, blank=True, help_text="phone number contact", max_length=100)
+ user_url = models.URLField(null=True, blank=True)
+ is_admin = models.BooleanField(default=False)
site = models.ForeignKey(Site, related_name='site_user', verbose_name="Site this user will be homed too")
def __unicode__(self): return u'%s' % (self.email)
- def save(self):
+ def save(self, *args, **kwds):
+ driver = OpenStackDriver()
+ name = self.email[:self.email.find('@')]
+ fields = {'name': name, 'email': self.email, 'password': self.password,
+ 'enabled': self.enabled}
if not self.id:
- self.created = datetime.date.today()
- self.updated = datetime.datetime.today()
- super(User, self).save()
+ user = driver.create_user(**fields)
+ else:
+ driver.update_user(self.user_id, **fields)
+ super(User, self).save(*args, **kwds)
+
+ def delete(self, *args, **kwds):
+ driver = OpenStackDriver()
+ driver.delete_user(self.user_id)
+ super(User, self).delete(*args, **kwds)
class SitePrivilege(PlCoreBase):
@@ -82,11 +99,37 @@
def __unicode__(self): return u'%s %s %s' % (self.site, self.user, self.role)
- def save(self):
- if not self.id:
- self.created = datetime.date.today()
- self.updated = datetime.datetime.today()
- super(SitePrivilege, self).save()
+ def save(self, *args, **kwds):
+ driver = OpenStackDriver()
+ driver.add_user_role(user_id=user.user_id,
+ tenant_id=site.tenant_id,
+ role_name=role.name)
+ super(SitePrivilege, self).save(*args, **kwds)
+
+ def delete(self, *args, **kwds):
+ driver = OpenStackDriver()
+ driver.delete_user_role(user_id=user.user_id,
+ tenant_id=site.tenant_id,
+ role_name=role.name)
+ super(SitePrivilege, self).delete(*args, **kwds)
+
+
+class DeploymentNetwork(PlCoreBase):
+ name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment Network")
+
+ def __unicode__(self): return u'%s' % (self.name)
+
+class SiteDeploymentNetwork(PlCoreBase):
+ class Meta:
+ unique_together = ['site', 'deploymentNetwork']
+
+ site = models.ForeignKey(Site, related_name='deploymentNetworks')
+ deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='sites')
+ name = models.CharField(default="Blah", max_length=100)
+
+
+ def __unicode__(self): return u'%s::%s' % (self.site, self.deploymentNetwork)
+
class Slice(PlCoreBase):
tenant_id = models.CharField(max_length=200, help_text="Keystone tenant id")
@@ -136,11 +179,19 @@
def __unicode__(self): return u'%s %s %s' % (self.slice, self.user, self.role)
- def save(self):
- if not self.id:
- self.created = datetime.date.today()
- self.updated = datetime.datetime.today()
- super(SliceMembership, self).save()
+ def save(self, *args, **kwds):
+ driver = OpenStackDriver()
+ driver.add_user_role(user_id=user.user_id,
+ tenant_id=slice.tenant_id,
+ role_name=role.name)
+ super(SliceMembership, self).save(*args, **kwds)
+
+ def delete(self, *args, **kwds):
+ driver = OpenStackDriver()
+ driver.delete_user_role(user_id=user.user_id,
+ tenant_id=slice.tenant_id,
+ role_name=role.name)
+ super(SliceMembership, self).delete(*args, **kwds)
class SubNet(PlCoreBase):
subnet_id = models.CharField(max_length=256, unique=True)
@@ -172,25 +223,6 @@
driver.delete_subnet(self.subnet_id)
super(SubNet, self).delete(*args, **kwargs)
-
-
-class DeploymentNetwork(PlCoreBase):
- name = models.CharField(max_length=200, unique=True, help_text="Name of the Deployment Network")
-
- def __unicode__(self): return u'%s' % (self.name)
-
-class SiteDeploymentNetwork(PlCoreBase):
- class Meta:
- unique_together = ['site', 'deploymentNetwork']
-
- site = models.ForeignKey(Site, related_name='deploymentNetworks')
- deploymentNetwork = models.ForeignKey(DeploymentNetwork, related_name='sites')
- name = models.CharField(default="Blah", max_length=100)
-
-
- def __unicode__(self): return u'%s::%s' % (self.site, self.deploymentNetwork)
-
-
class Node(PlCoreBase):
name = models.CharField(max_length=200, unique=True, help_text="Name of the Node")
siteDeploymentNetwork = models.ForeignKey(SiteDeploymentNetwork, help_text="The Site and Deployment Network this Node belongs too.")