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'
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':
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
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
# 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(), ImageDeployments, "deployment", "image")
+ # manipulate_m2m_objs doesn't work for Flavor/Deployment relationship
+ # so well handle that manually here
+ for flavor in deployment.flavors.all():
+ if getattr(flavor, 'name') not in self.cleaned_data['flavors']:
+ deployment.flavors.remove(flavor)
+ for flavor in self.cleaned_data['flavors']:
+ if flavor not in deployment.flavors.all():
+ flavor.deployments.add(deployment)
self.save_m2m()
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():
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(
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
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',)
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
('siteprivileges','Privileges'),
('deployments','Deployments'),
('slices','Slices'),
- ('nodes','Nodes'),
+ #('nodes','Nodes'),
('tags','Tags'),
)
readonly_fields = ['backend_status_text', 'accountLink']
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):
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')
def render_change_form(self, request, context, add=False, change=False, form_url='', obj=None):
deployment_nodes = []
for node in Node.objects.all():
- deployment_nodes.append( (node.deployment.id, node.id, node.name) )
+ deployment_nodes.append( (node.site_deployment.id, node.id, node.name) )
deployment_flavors = []
for flavor in Flavor.objects.all():
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():
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'))
'ip': PlainTextWidget(),
'instance_name': PlainTextWidget(),
'slice': LinkedSelect,
- 'deploymentNetwork': LinkedSelect,
+ 'controllerNetwork': LinkedSelect,
'node': LinkedSelect,
'image': LinkedSelect
}
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'),
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':
def queryset(self, request):
return User.select_by_user(request.user)
+class ControllerDashboardInline(PlStackTabularInline):
+ model = ControllerDashboard
+ extra = 0
+ fields = ["controller", "url"]
+ suit_classes = 'suit-tab suit-tab-controllers'
+
class DashboardViewAdmin(PlanetStackBaseAdmin):
fieldsets = [('Dashboard View Details',
{'fields': ['backend_status_text', 'name', 'url'],
'classes': ['suit-tab suit-tab-general']})
]
readonly_fields = ('backend_status_text', )
+ inlines = [ControllerDashboardInline]
- suit_form_tabs =(('general','Dashboard View Details'),)
+ suit_form_tabs =(('general','Dashboard View Details'),
+ ('controllers', 'Per-controller Dashboard Details'))
class ServiceResourceInline(PlStackTabularInline):
model = ServiceResource