X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=plstackapi%2Fcore%2Fadmin.py;h=d0b83e7e7b7041f7e202ec42ac1b66b5086e6b4f;hb=659dd52fcd50b58549f1eaa2812223792b4e4104;hp=b45e5718350e2b7a2f6d9189bfff2399b535e6d8;hpb=ab05c3bd615fd557169ced0cc83c5ee27943ae35;p=plstackapi.git diff --git a/plstackapi/core/admin.py b/plstackapi/core/admin.py index b45e571..d0b83e7 100644 --- a/plstackapi/core/admin.py +++ b/plstackapi/core/admin.py @@ -1,7 +1,6 @@ from plstackapi.core.models import Site from plstackapi.core.models import * -from plstackapi.openstack.driver import OpenStackDriver -from plstackapi.openstack.client import OpenStackClient +from plstackapi.openstack.manager import OpenStackManager from django.contrib import admin from django.contrib.auth.models import Group @@ -31,7 +30,7 @@ class ReadonlyTabularInline(admin.TabularInline): class SliverInline(admin.TabularInline): model = Sliver - fields = ['ip', 'name', 'slice', 'image', 'key', 'node', 'deploymentNetwork'] + fields = ['ip', 'name', 'slice', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork'] extra = 0 class SiteInline(admin.TabularInline): @@ -54,26 +53,33 @@ class NodeInline(admin.TabularInline): model = Node extra = 0 -class PlainTextWidget(forms.Widget): - def render(self, _name, value, attrs): - return mark_safe(value) if value is not None else '' +class PlainTextWidget(forms.HiddenInput): + input_type = 'hidden' + + def render(self, name, value, attrs=None): + if value is None: + value = '' + return mark_safe(value + super(PlainTextWidget, self).render(name, value, attrs)) 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 + if request.user.site: + 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() + if request.user.site: + 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 +87,7 @@ class RoleAdmin(OSModelAdmin): ] list_display = ('role_type',) + class DeploymentNetworkAdminForm(forms.ModelForm): sites = forms.ModelMultipleChoiceField( queryset=Site.objects.all(), @@ -113,6 +120,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 + 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 SiteAdmin(OSModelAdmin): fieldsets = [ (None, {'fields': ['name', 'site_url', 'enabled', 'is_public', 'login_base']}), @@ -124,6 +142,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']}) @@ -132,16 +161,16 @@ class SitePrivilegeAdmin(PlanetStackBaseAdmin): def save_model(self, request, obj, form, change): # update openstack connection to use this site/tenant - client = OpenStackClient(tenant=obj.site.login_base, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + auth = request.session.get('auth', {}) + auth['tenant'] = obj.site.login_base + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.save() def delete_model(self, request, obj): # update openstack connection to use this site/tenant - client = OpenStackClient(tenant=obj.site.login_base, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + auth = request.session.get('auth', {}) + auth['tenant'] = obj.site.login_base + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.delete() class KeyAdmin(OSModelAdmin): @@ -160,10 +189,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', 'description', 'slice_url'] + list_display = ('name', 'site','serviceClass', 'slice_url') 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 + auth = request.session.get('auth', {}) + auth['tenant'] = obj.name # meed to connect using slice's tenant + inline.model.os_manager = OpenStackManager(auth=auth, 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: @@ -178,35 +218,36 @@ class SliceMembershipAdmin(PlanetStackBaseAdmin): list_display = ('user', 'slice', 'role') def save_model(self, request, obj, form, change): - # update openstack connection to use this slice/tenant - client = OpenStackClient(tenant=obj.slice.name, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + # update openstack connection to use this site/tenant + auth = request.session.get('auth', {}) + auth['tenant'] = obj.slice.name + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.save() def delete_model(self, request, obj): - # update openstack connection to use this slice/tenant - client = OpenStackClient(tenant=obj.slice.name, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + # update openstack connection to use this site/tenant + auth = request.session.get('auth', {}) + auth['tenant'] = obj.slice.name + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.delete() + class SubnetAdmin(PlanetStackBaseAdmin): fields = ['cidr', 'ip_version', 'start', 'end', 'slice'] list_display = ('slice','cidr', 'start', 'end', 'ip_version') def save_model(self, request, obj, form, change): - # update openstack connection to use this subnet's slice/tenant - client = OpenStackClient(tenant=obj.slice.name, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + # update openstack connection to use this site/tenant + auth = request.session.get('auth', {}) + auth['tenant'] = obj.slice.name + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.save() def delete_model(self, request, obj): - # update openstack connection to use this subnet's slice/tenant - client = OpenStackClient(tenant=obj.slice.name, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + # update openstack connection to use this site/tenant + auth = request.session.get('auth', {}) + auth['tenant'] = obj.slice.name + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.delete() class ImageAdmin(admin.ModelAdmin): @@ -220,32 +261,33 @@ class NodeAdmin(admin.ModelAdmin): class SliverForm(forms.ModelForm): class Meta: ip = forms.CharField(widget=PlainTextWidget) + instance_name = forms.CharField(widget=PlainTextWidget) model = Sliver widgets = { 'ip': PlainTextWidget(), + 'instance_name': PlainTextWidget(), } class SliverAdmin(PlanetStackBaseAdmin): form = SliverForm fieldsets = [ - ('Sliver', {'fields': ['ip', 'name', 'slice', 'image', 'key', 'node', 'deploymentNetwork']}) + ('Sliver', {'fields': ['ip', 'instance_name', 'name', 'slice', 'numberCores', 'image', 'key', 'node', 'deploymentNetwork']}) ] - list_display = ['ip', 'name', 'slice', 'image', 'key', 'node', 'deploymentNetwork'] + list_display = ['ip', 'instance_name', '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 - client = OpenStackClient(tenant=obj.slice.name, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + # update openstack connection to use this site/tenant + auth = request.session.get('auth', {}) + auth['tenant'] = obj.slice.name + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.save() def delete_model(self, request, obj): - # update openstack connection to use this sliver's slice/tenant - client = OpenStackClient(tenant=obj.slice.name, **request.session.get('auth', {})) - obj.driver = OpenStackDriver(client=client) - obj.caller = request.user + # update openstack connection to use this site/tenant + auth = request.session.get('auth', {}) + auth['tenant'] = obj.slice.name + obj.os_manager = OpenStackManager(auth=auth, caller=request.user) obj.delete() - class UserCreationForm(forms.ModelForm): """A form for creating new users. Includes all the required @@ -268,7 +310,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