X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plstackapi%2Fcore%2Fadmin.py;h=e332c29d70bbd96b28659793b1cbc21705349e3d;hb=6072206079cb0cc3c33fb7bce93f9c7424effc46;hp=55b2ec2675465009f4cd7ca5de8dd07092cd5156;hpb=231f4c8e62da2bfd5165ff7e3d27d11834f6ae8e;p=plstackapi.git diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py index 55b2ec2..e332c29 100644 --- a/plstackapi/core/admin.py +++ b/plstackapi/core/admin.py @@ -1,5 +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 @@ class ReadonlyTabularInline(admin.TabularInline): class SliverInline(admin.TabularInline): model = Sliver - fields = ['ip', 'name', 'slice', 'flavor', 'image', 'key', 'node', 'deploymentNetwork'] + fields = ['ip', 'name', 'slice', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork'] extra = 0 class SiteInline(admin.TabularInline): @@ -62,18 +63,19 @@ class PlanetStackBaseAdmin(admin.ModelAdmin): save_on_top = False class OSModelAdmin(PlanetStackBaseAdmin): - """Attach client connection to openstack on delete() and save()""" + """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 + 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): - client = OpenStackClient(tenant=request.user.site.login_base, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user - obj.delete() + auth = request.session.get('auth', {}) + auth['tenant'] = request.user.site.login_base + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) + obj.delete() class RoleAdmin(OSModelAdmin): fieldsets = [ @@ -81,6 +83,7 @@ class RoleAdmin(OSModelAdmin): ] list_display = ('role_type',) + class DeploymentNetworkAdminForm(forms.ModelForm): sites = forms.ModelMultipleChoiceField( queryset=Site.objects.all(), @@ -113,6 +116,17 @@ class DeploymentNetworkAdmin(PlanetStackBaseAdmin): 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']}), @@ -124,6 +138,17 @@ class SiteAdmin(OSModelAdmin): 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 + 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): fieldsets = [ (None, {'fields': ['user', 'site', 'role']}) @@ -160,10 +185,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 +264,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', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork']}) ] - list_display = ['ip', 'name', 'slice', 'flavor', '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 +304,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 +377,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)