X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fcore%2Fadmin.py;h=bc845540f1116480e29963555e21a59df4437092;hb=a5800d37ffca30e7c9231045dd553f68b7191906;hp=d1e4cd0184ca2e82bc93487097fae325a3194cdf;hpb=9556a418c315aa8e839cb87fc4734de1122eae99;p=plstackapi.git diff --git a/planetstack/core/admin.py b/planetstack/core/admin.py index d1e4cd0..bc84554 100644 --- a/planetstack/core/admin.py +++ b/planetstack/core/admin.py @@ -340,7 +340,7 @@ class NetworkLookerUpper: class SliverInline(PlStackTabularInline): model = Sliver - fields = ['backend_status_icon', 'all_ips_string', 'instance_name', 'slice', 'deploymentNetwork', 'flavor', 'image', 'node'] + fields = ['backend_status_icon', 'all_ips_string', 'instance_name', 'slice', 'controllerNetwork', 'flavor', 'image', 'node'] extra = 0 readonly_fields = ['backend_status_icon', 'all_ips_string', 'instance_name'] suit_classes = 'suit-tab suit-tab-slivers' @@ -349,7 +349,7 @@ class SliverInline(PlStackTabularInline): return Sliver.select_by_user(request.user) def formfield_for_foreignkey(self, db_field, request=None, **kwargs): - if db_field.name == 'deploymentNetwork': + if db_field.name == 'controllerNetwork': kwargs['queryset'] = Deployment.select_by_acl(request.user) kwargs['widget'] = forms.Select(attrs={'onChange': "sliver_deployment_changed(this);"}) elif db_field.name == 'flavor': @@ -391,9 +391,19 @@ class NodeInline(PlStackTabularInline): model = Node extra = 0 suit_classes = 'suit-tab suit-tab-nodes' - fields = ['backend_status_icon', 'name','deployment','site'] + fields = ['backend_status_icon', 'name', 'site_deployment'] readonly_fields = ('backend_status_icon', ) +class DeploymentPrivilegeInline(PlStackTabularInline): + model = DeploymentPrivilege + extra = 0 + suit_classes = 'suit-tab suit-tab-admin-only' + fields = ['backend_status_icon', 'user','role','deployment'] + readonly_fields = ('backend_status_icon', ) + + def queryset(self, request): + return DeploymentPrivilege.select_by_user(request.user) + class ControllerPrivilegeInline(PlStackTabularInline): model = ControllerPrivilege extra = 0 @@ -404,6 +414,12 @@ class ControllerPrivilegeInline(PlStackTabularInline): def queryset(self, request): return ControllerPrivilege.select_by_user(request.user) +class ControllerSiteDeploymentsInline(PlStackTabularInline): + model = ControllerSiteDeployments + extra = 0 + suit_classes = 'suit-tab suit-tab-admin-only' + fields = ['controller', 'site_deployment', 'tenant_id'] + class SitePrivilegeInline(PlStackTabularInline): model = SitePrivilege extra = 0 @@ -588,7 +604,7 @@ class DeploymentAdminForm(forms.ModelForm): # a better way... self.manipulate_m2m_objs(deployment, self.cleaned_data['sites'], deployment.sitedeployments.all(), SiteDeployments, "deployment", "site") - self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments.all(), ControllerImages, "deployment", "image") + self.manipulate_m2m_objs(deployment, self.cleaned_data['images'], deployment.imagedeployments.all(), DeploymentImages, "deployment", "image") self.save_m2m() @@ -605,16 +621,20 @@ class SiteAssocInline(PlStackTabularInline): class DeploymentAdmin(PlanetStackBaseAdmin): model = Deployment - fieldList = ['backend_status_text', 'name', 'availability_zone', 'sites', 'images', 'flavors', 'accessControl'] + fieldList = ['backend_status_text', 'name', 'sites', 'images', 'flavors', 'accessControl'] fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-sites']})] - inlines = [ControllerPrivilegeInline,NodeInline,TagInline] # ,ControllerImagesInline] + # node no longer directly connected to deployment + #inlines = [DeploymentPrivilegeInline,NodeInline,TagInline,ImageDeploymentsInline] + inlines = [DeploymentPrivilegeInline,TagInline,ImageDeploymentsInline] list_display = ['backend_status_icon', 'name'] list_display_links = ('backend_status_icon', 'name', ) readonly_fields = ('backend_status_text', ) user_readonly_fields = ['name'] - suit_form_tabs =(('sites','Deployment Details'),('nodes','Nodes'),('deploymentprivileges','Privileges'),('tags','Tags')) # ,('imagedeployments','Images')) + # nodes no longer direclty connected to deployments + #suit_form_tabs =(('sites','Deployment Details'),('nodes','Nodes'),('deploymentprivileges','Privileges'),('tags','Tags'),('imagedeployments','Images')) + suit_form_tabs =(('sites','Deployment Details'),('deploymentprivileges','Privileges'),('tags','Tags'),('imagedeployments','Images')) def get_form(self, request, obj=None, **kwargs): if request.user.isReadOnlyUser(): @@ -634,7 +654,7 @@ class DeploymentAdmin(PlanetStackBaseAdmin): class ControllerAdminForm(forms.ModelForm): site_deployments = forms.ModelMultipleChoiceField( - queryset=SiteDeployment.objects.all(), + queryset=SiteDeployments.objects.all(), required=False, help_text="Select which sites deployments are managed by this controller", widget=FilteredSelectMultiple( @@ -645,14 +665,14 @@ class ControllerAdminForm(forms.ModelForm): class Meta: model = Controller - def __init__(self, *args, **kwds): + def __init__(self, *args, **kwargs): request = kwargs.pop('request', None) super(ControllerAdminForm, self).__init__(*args, **kwargs) if self.instance and self.instance.pk: self.fields['site_deployments'].initial = [x.site_deployment for x in self.instance.controllersitedeployments.all()] - def manipulate_m2m_objs(self, this_obj, selected_objs, all_relations, relation_class, local_attrname, foreign_attrname): + def manipulate_m2m_objs(self, this_obj, selected_objs, all_relations, relation_class, local_attrname, foreign_attrname): """ helper function for handling m2m relations from the MultipleChoiceField this_obj: the source object we want to link from selected_objs: a list of destination objects we want to link to @@ -679,27 +699,26 @@ class ControllerAdminForm(forms.ModelForm): relation = relation_class(**kwargs) relation.save() - def save(self, commit=True): - controller = super(ControllerAdminForm, self).save(commit=False) - - if commit: - controller.save() + def save(self, commit=True): + controller = super(ControllerAdminForm, self).save(commit=False) + if commit: + controller.save() - if controller.pk: - # save_m2m() doesn't seem to work with 'through' relations. So we - # create/destroy the through models ourselves. There has to be - # a better way... + if controller.pk: + # save_m2m() doesn't seem to work with 'through' relations. So we + # create/destroy the through models ourselves. There has to be + # a better way... self.manipulate_m2m_objs(controller, self.cleaned_data['site_deployments'], controller.controllersitedeployments.all(), ControllerSiteDeployments, "controller", "site_deployment") - self.save_m2m() + self.save_m2m() - return controller + return controller class ControllerAdmin(PlanetStackBaseAdmin): model = Controller - fieldList = ['name', 'version', 'backend_type', 'auth_url', 'admin_user', 'admin_tenant',] - fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-admin-only']})] - inlines = [ControllerPrivilegeInline, ContrllerSiteInline] # ,ControllerImagesInline] + fieldList = ['name', 'version', 'backend_type', 'auth_url', 'admin_user', 'admin_tenant','admin_password'] + #fieldsets = [(None, {'fields': fieldList, 'classes':['suit-tab suit-tab-general']})] + inlines = [ControllerSiteDeploymentsInline] # ,ControllerImagesInline] list_display = ['backend_status_icon', 'name', 'version', 'backend_type'] list_display_links = ('backend_status_icon', 'name', ) readonly_fields = ('backend_status_text',) @@ -707,11 +726,12 @@ class ControllerAdmin(PlanetStackBaseAdmin): user_readonly_fields = [] def get_form(self, request, obj=None, **kwargs): + print self.fieldsets if request.user.isReadOnlyUser(): kwargs["form"] = ControllerAdminROForm else: kwargs["form"] = ControllerAdminForm - adminForm = super(DeploymentAdmin,self).get_form(request, obj, **kwargs) + adminForm = super(ControllerAdmin,self).get_form(request, obj, **kwargs) # from stackexchange: pass the request object into the form @@ -754,7 +774,7 @@ class SiteAdmin(PlanetStackBaseAdmin): ('siteprivileges','Privileges'), ('deployments','Deployments'), ('slices','Slices'), - ('nodes','Nodes'), + #('nodes','Nodes'), ('tags','Tags'), ) readonly_fields = ['backend_status_text', 'accountLink'] @@ -764,7 +784,7 @@ class SiteAdmin(PlanetStackBaseAdmin): list_display = ('backend_status_icon', 'name', 'login_base','site_url', 'enabled') list_display_links = ('backend_status_icon', 'name', ) filter_horizontal = ('deployments',) - inlines = [SliceInline,UserInline,TagInline, NodeInline, SitePrivilegeInline, SiteDeploymentsInline] + inlines = [SliceInline,UserInline,TagInline, SitePrivilegeInline, SiteDeploymentsInline] search_fields = ['name'] def queryset(self, request): @@ -908,7 +928,6 @@ class SliceAdmin(PlanetStackBaseAdmin): return super(SliceAdmin, self).add_view(request, form_url, extra_context=extra_context) def change_view(self, request, object_id, form_url='', extra_context=None): - print object_id # cannot change the site of an existing slice so make the site field read only if object_id: self.readonly_fields = ('backend_status_text','site') @@ -924,10 +943,10 @@ class SliceAdmin(PlanetStackBaseAdmin): for deployment in flavor.deployments.all(): deployment_flavors.append( (deployment.id, flavor.id, flavor.name) ) - controller_images = [] + deployment_images = [] for image in Image.objects.all(): - for controller_image in image.controllerimages.all(): - controller_images.append( (controller_image.controller.id, image.id, image.name) ) + for deployment_image in image.imagedeployments.all(): + deployment_images.append( (deployment_image.controller.id, image.id, image.name) ) site_login_bases = [] for site in Site.objects.all(): @@ -1025,15 +1044,15 @@ class NodeForm(forms.ModelForm): class NodeAdmin(PlanetStackBaseAdmin): form = NodeForm - list_display = ('backend_status_icon', 'name', 'site', 'deployment') + list_display = ('backend_status_icon', 'name', 'site_deployment') list_display_links = ('backend_status_icon', 'name', ) - list_filter = ('deployment',) + list_filter = ('site_deployment',) inlines = [TagInline,SliverInline] - fieldsets = [('Node Details', {'fields': ['backend_status_text', 'name','site','deployment'], 'classes':['suit-tab suit-tab-details']})] + fieldsets = [('Node Details', {'fields': ['backend_status_text', 'name','site_deployment'], 'classes':['suit-tab suit-tab-details']})] readonly_fields = ('backend_status_text', ) - user_readonly_fields = ['name','site','deployment'] + user_readonly_fields = ['name','site_deployment'] user_readonly_inlines = [TagInline,SliverInline] suit_form_tabs =(('details','Node Details'),('slivers','Slivers'),('tags','Tags')) @@ -1048,7 +1067,7 @@ class SliverForm(forms.ModelForm): 'ip': PlainTextWidget(), 'instance_name': PlainTextWidget(), 'slice': LinkedSelect, - 'deploymentNetwork': LinkedSelect, + 'controllerNetwork': LinkedSelect, 'node': LinkedSelect, 'image': LinkedSelect } @@ -1062,10 +1081,10 @@ class TagAdmin(PlanetStackBaseAdmin): class SliverAdmin(PlanetStackBaseAdmin): form = SliverForm fieldsets = [ - ('Sliver Details', {'fields': ['backend_status_text', 'slice', 'deploymentNetwork', 'node', 'ip', 'instance_name', 'flavor', 'image', ], 'classes': ['suit-tab suit-tab-general'], }) + ('Sliver Details', {'fields': ['backend_status_text', 'slice', 'controllerNetwork', 'node', 'ip', 'instance_name', 'flavor', 'image', ], 'classes': ['suit-tab suit-tab-general'], }) ] readonly_fields = ('backend_status_text', ) - list_display = ['backend_status_icon', 'ip', 'instance_name', 'slice', 'flavor', 'image', 'node', 'deploymentNetwork'] + list_display = ['backend_status_icon', 'ip', 'instance_name', 'slice', 'flavor', 'image', 'node', 'controllerNetwork'] list_display_links = ('backend_status_icon', 'ip',) suit_form_tabs =(('general', 'Sliver Details'), @@ -1074,7 +1093,7 @@ class SliverAdmin(PlanetStackBaseAdmin): inlines = [TagInline] - user_readonly_fields = ['slice', 'deploymentNetwork', 'node', 'ip', 'instance_name', 'flavor', 'image'] + user_readonly_fields = ['slice', 'controllerNetwork', 'node', 'ip', 'instance_name', 'flavor', 'image'] def formfield_for_foreignkey(self, db_field, request, **kwargs): if db_field.name == 'slice':