update user admin
diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py
index da2bea5..13c636b 100644
--- a/plstackapi/core/admin.py
+++ b/plstackapi/core/admin.py
@@ -82,6 +82,21 @@
inlines = [NodeInline,]
search_fields = ['name']
+class UserForm(forms.ModelForm):
+ class Meta:
+ password = forms.CharField(widget=forms.PasswordInput)
+ model = User
+ widgets = {
+ 'password': forms.PasswordInput(),
+ }
+class UserAdmin(admin.ModelAdmin):
+ form = UserForm
+ fieldsets = [
+ ('User', {'fields': ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']})
+ ]
+ list_display = ['firstname', 'lastname', 'email', 'password', 'phone', 'user_url', 'is_admin', 'site']
+ search_fields = ['email']
+
class SliceAdmin(PlanetStackBaseAdmin):
fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
list_display = ('name', 'site','slice_url', 'instantiation')
@@ -115,6 +130,6 @@
admin.site.register(Flavor)
admin.site.register(Key)
admin.site.register(Role, RoleAdmin)
-admin.site.register(User)
+admin.site.register(User, UserAdmin)
admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)
diff --git a/plstackapi/core/models/slice.py b/plstackapi/core/models/slice.py
index 4182e2f..a18a09e 100644
--- a/plstackapi/core/models/slice.py
+++ b/plstackapi/core/models/slice.py
@@ -5,7 +5,6 @@
from plstackapi.core.models import User
from plstackapi.core.models import Role
from plstackapi.core.models import DeploymentNetwork
-
from plstackapi.openstack.driver import OpenStackDriver
# Create your models here.
diff --git a/plstackapi/core/models/user.py b/plstackapi/core/models/user.py
index 765fb62..c21601c 100644
--- a/plstackapi/core/models/user.py
+++ b/plstackapi/core/models/user.py
@@ -3,14 +3,18 @@
from django.db import models
from plstackapi.core.models import PlCoreBase
from plstackapi.core.models import Site
+from plstackapi.openstack.driver import OpenStackDriver
+
# Create your models here.
class User(PlCoreBase):
- user_id = models.CharField(max_length=256, unique=True)
+ user_id = models.CharField(max_length=256, unique=True, blank=True)
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")
+ email = models.EmailField(help_text="e-mail address", null=True)
+ password = models.CharField(max_length=256, null=True, blank=True)
+
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)
@@ -18,3 +22,23 @@
site = models.ForeignKey(Site, related_name='users', verbose_name="Site this user will be homed too")
def __unicode__(self): return u'%s' % (self.email)
+
+ def save(self, *args, **kwds):
+ driver = OpenStackDriver()
+ if not self.user_id:
+ name = self.email[:self.email.find('@')]
+ user_fields = {'name': name,
+ 'email': self.email,
+ 'password': self.password,
+ 'enabled': self.enabled}
+ user = driver.create_user(**user_fields)
+ self.user_id = user.id
+
+ self.password = None
+ super(User, self).save(*args, **kwds)
+
+ def delete(self, *args, **kwds):
+ driver = OpenStackDriver()
+ if self.user_id:
+ driver.delete_user(self.user_id)
+ super(User, self).delete(*args, **kwds)
diff --git a/plstackapi/core/serializers.py b/plstackapi/core/serializers.py
index 6317803..5e077dc 100644
--- a/plstackapi/core/serializers.py
+++ b/plstackapi/core/serializers.py
@@ -26,6 +26,7 @@
'firstname',
'lastname',
'email',
+ 'password',
'phone',
'user_url',
'is_admin',