Merged with Tony's changes -- added numberCores to SliverAdmins
authorSiobhan Tully <stully@verivue.com>
Thu, 2 May 2013 10:02:36 +0000 (06:02 -0400)
committerSiobhan Tully <stully@verivue.com>
Thu, 2 May 2013 10:02:36 +0000 (06:02 -0400)
1  2 
plstackapi/core/admin.py
plstackapi/core/models/sliver.py

diff --combined plstackapi/core/admin.py
@@@ -1,5 -1,6 +1,6 @@@
  from plstackapi.core.models import Site
  from plstackapi.core.models import *
+ from plstackapi.openstack.manager import OpenStackManager
  from plstackapi.openstack.driver import OpenStackDriver
  from plstackapi.openstack.client import OpenStackClient
  
@@@ -31,7 -32,7 +32,7 @@@ class ReadonlyTabularInline(admin.Tabul
  
  class SliverInline(admin.TabularInline):
      model = Sliver
-     fields = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
 -    fields = ['ip', 'name', 'slice', 'image', 'key', 'node', 'deploymentNetwork']
++    fields = ['ip', 'name', 'slice', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork']
      extra = 0
  
  class SiteInline(admin.TabularInline):
@@@ -63,6 -64,7 +64,7 @@@ class PlanetStackBaseAdmin(admin.ModelA
  
  class OSModelAdmin(PlanetStackBaseAdmin):
      """Attach client connection to openstack on delete() and save()""" 
      def save_model(self, request, obj, form, change):
          client = OpenStackClient(tenant=request.user.site.login_base, **request.session.get('auth', {}))
          obj.driver = OpenStackDriver(client=client)
          obj.caller = request.user
          obj.delete()
  
- class RoleAdmin(OSModelAdmin):
+ class RoleAdmin(PlanetStackBaseAdmin):
      fieldsets = [
          ('Role', {'fields': ['role_type']})
      ]
      list_display = ('role_type',)
  
+     def save_model(self, request, obj, form, change):
+         auth = request.session.get('auth', {})
+         auth['tenant'] = request.user.site.login_base
+         obj.os_manager = OpenStackManager(auth=auth, caller=request.user)
+         obj.save()
+     def delete_model(self, request, obj):
+         auth = request.session.get('auth', {})
+         auth['tenant'] = request.user.site.login_base
+         obj.os_manager = OpenStackManager(auth=auth, caller=request.user)
+         obj.delete()
  class DeploymentNetworkAdminForm(forms.ModelForm):
      sites = forms.ModelMultipleChoiceField(
          queryset=Site.objects.all(),
@@@ -113,6 -127,17 +127,17 @@@ class DeploymentNetworkAdmin(PlanetStac
      form = DeploymentNetworkAdminForm
      inlines = [NodeInline,]
  
+     def get_formsets(self, request, obj=None):
+         for inline in self.get_inline_instances(request, obj):
+             # hide MyInline in the add view
+             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
+             yield inline.get_formset(request, obj)
  class SiteAdmin(OSModelAdmin):
      fieldsets = [
          (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base']}),
      inlines = [NodeInline,]
      search_fields = ['name']
  
+     def get_formsets(self, request, obj=None):
+         for inline in self.get_inline_instances(request, obj):
+             # hide MyInline in the add view
+             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
+             yield inline.get_formset(request, obj)
  class SitePrivilegeAdmin(PlanetStackBaseAdmin):
      fieldsets = [
          (None, {'fields': ['user', 'site', 'role']})
@@@ -160,10 -196,21 +196,21 @@@ class KeyAdmin(OSModelAdmin)
          
  
  class SliceAdmin(OSModelAdmin):
 -    fields = ['name', 'site', 'instantiation', 'description', 'slice_url']
 -    list_display = ('name', 'site','slice_url', 'instantiation')
 +    fields = ['name', 'site', 'serviceClass', 'instantiation', 'description', 'slice_url']
 +    list_display = ('name', 'site','serviceClass', 'slice_url', 'instantiation')
      inlines = [SliverInline]
  
+     def get_formsets(self, request, obj=None):
+         for inline in self.get_inline_instances(request, obj):
+             # hide MyInline in the add view
+             if obj is None:
+                 continue
+             # give inline object access to driver and caller
+             client = OpenStackClient(tenant=obj.name, **request.session.get('auth', {}))
+             inline.model.driver = OpenStackDriver(client=client)
+             inline.model.caller = request.user
+             yield inline.get_formset(request, obj)
      def get_queryset(self, request):
          qs = super(SliceAdmin, self).get_queryset(request)
          if request.user.is_superuser:
@@@ -228,9 -275,9 +275,9 @@@ class SliverForm(forms.ModelForm)
  class SliverAdmin(PlanetStackBaseAdmin):
      form = SliverForm
      fieldsets = [
-         ('Sliver', {'fields': ['ip', 'name', 'slice', 'numberCores', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']})
 -        ('Sliver', {'fields': ['ip', 'name', 'slice', 'image', 'key', 'node', 'deploymentNetwork']})
++        ('Sliver', {'fields': ['ip', 'name', 'slice', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork']})
      ]
-     list_display = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork']
 -    list_display = ['ip', 'name', 'slice', 'image', 'key', 'node', 'deploymentNetwork']
++    list_display = ['ip', 'name', 'slice', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork']
  
      def save_model(self, request, obj, form, change):
          # update openstack connection to use this sliver's slice/tenant
@@@ -268,7 -315,8 +315,8 @@@ class UserCreationForm(forms.ModelForm)
      def save(self, commit=True):
          # Save the provided password in hashed format
          user = super(UserCreationForm, self).save(commit=False)
-         user.set_password(self.cleaned_data["password1"])
+         user.password = self.cleaned_data["password1"]
+         #user.set_password(self.cleaned_data["password1"])
          if commit:
              user.save()
          return user
@@@ -340,7 -388,6 +388,6 @@@ admin.site.register(Subnet, SubnetAdmin
  admin.site.register(Image, ImageAdmin)
  admin.site.register(Node, NodeAdmin)
  admin.site.register(Sliver, SliverAdmin)
- admin.site.register(Flavor)
  admin.site.register(Key, KeyAdmin)
  admin.site.register(Role, RoleAdmin)
  admin.site.register(DeploymentNetwork, DeploymentNetworkAdmin)
@@@ -2,7 -2,6 +2,6 @@@ import o
  from django.db import models
  from django.core import exceptions
  from plstackapi.core.models import PlCoreBase
- from plstackapi.core.models import Flavor
  from plstackapi.core.models import Image
  from plstackapi.core.models import Key
  from plstackapi.core.models import Slice
@@@ -14,15 -13,13 +13,15 @@@ from plstackapi.core.models import Depl
  class Sliver(PlCoreBase):
      instance_id = models.CharField(max_length=200, help_text="Nova instance id")    
      name = models.CharField(max_length=200, help_text="Sliver name")
+     instance_name = models.CharField(blank=True, null=True, max_length=200, help_text="OpenStack generated name")
      ip = models.GenericIPAddressField(help_text="Sliver ip address", blank=True, null=True)
-     flavor = models.ForeignKey(Flavor, related_name='slivers')
      image = models.ForeignKey(Image, related_name='slivers')
      key = models.ForeignKey(Key, related_name='slivers')
      slice = models.ForeignKey(Slice, related_name='slivers')
      node = models.ForeignKey(Node, related_name='slivers')
      deploymentNetwork = models.ForeignKey(DeploymentNetwork, verbose_name='deployment', related_name='sliver_deploymentNetwork')
 +    numberCores = models.IntegerField(verbose_name="Number of Cores", help_text="Number of cores for sliver", default=2)
 +
  
      def __unicode__(self):  return u'%s::%s' % (self.slice, self.deploymentNetwork)
  
          if not self.instance_id:
              instance = self.driver.spawn_instance(name=self.name,
                                     key_name = self.key.name,
-                                    flavor_id = self.flavor.flavor_id,
                                     image_id = self.image.image_id,
                                     hostname = self.node.name )
              self.instance_id = instance.id
+             self.instance_name = getattr(instance, 'OS-EXT-SRV-ATTR:instance_name')
  
          super(Sliver, self).save(*args, **kwds)