views.py 7.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229
  1. from __future__ import unicode_literals
  2. from django.contrib.auth.mixins import PermissionRequiredMixin
  3. from django.db.models import Count
  4. from django.shortcuts import get_object_or_404, render
  5. from django.urls import reverse
  6. from django.views.generic import View
  7. from utilities.views import (
  8. BulkDeleteView, BulkEditView, BulkImportView, ComponentCreateView, ComponentDeleteView, ComponentEditView,
  9. ObjectDeleteView, ObjectEditView, ObjectListView,
  10. )
  11. from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
  12. import forms
  13. import tables
  14. #
  15. # Cluster types
  16. #
  17. class ClusterTypeListView(ObjectListView):
  18. queryset = ClusterType.objects.annotate(cluster_count=Count('clusters'))
  19. table = tables.ClusterTypeTable
  20. template_name = 'virtualization/clustertype_list.html'
  21. class ClusterTypeCreateView(PermissionRequiredMixin, ObjectEditView):
  22. permission_required = 'virtualization.add_clustertype'
  23. model = ClusterType
  24. form_class = forms.ClusterTypeForm
  25. def get_return_url(self, request, obj):
  26. return reverse('virtualization:clustertype_list')
  27. class ClusterTypeEditView(ClusterTypeCreateView):
  28. permission_required = 'virtualization.change_clustertype'
  29. class ClusterTypeBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  30. permission_required = 'virtualization.delete_clustertype'
  31. cls = ClusterType
  32. queryset = ClusterType.objects.annotate(cluster_count=Count('clusters'))
  33. table = tables.ClusterTypeTable
  34. default_return_url = 'virtualization:clustertype_list'
  35. #
  36. # Cluster groups
  37. #
  38. class ClusterGroupListView(ObjectListView):
  39. queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters'))
  40. table = tables.ClusterGroupTable
  41. template_name = 'virtualization/clustergroup_list.html'
  42. class ClusterGroupCreateView(PermissionRequiredMixin, ObjectEditView):
  43. permission_required = 'virtualization.add_clustergroup'
  44. model = ClusterGroup
  45. form_class = forms.ClusterGroupForm
  46. def get_return_url(self, request, obj):
  47. return reverse('virtualization:clustergroup_list')
  48. class ClusterGroupEditView(ClusterGroupCreateView):
  49. permission_required = 'virtualization.change_clustergroup'
  50. class ClusterGroupBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  51. permission_required = 'virtualization.delete_clustergroup'
  52. cls = ClusterGroup
  53. queryset = ClusterGroup.objects.annotate(cluster_count=Count('clusters'))
  54. table = tables.ClusterGroupTable
  55. default_return_url = 'virtualization:clustergroup_list'
  56. #
  57. # Clusters
  58. #
  59. class ClusterListView(ObjectListView):
  60. queryset = Cluster.objects.annotate(vm_count=Count('virtual_machines'))
  61. table = tables.ClusterTable
  62. template_name = 'virtualization/cluster_list.html'
  63. class ClusterView(View):
  64. def get(self, request, pk):
  65. cluster = get_object_or_404(Cluster, pk=pk)
  66. return render(request, 'virtualization/cluster.html', {
  67. 'cluster': cluster,
  68. })
  69. class ClusterCreateView(PermissionRequiredMixin, ObjectEditView):
  70. permission_required = 'virtualization.add_cluster'
  71. model = Cluster
  72. form_class = forms.ClusterForm
  73. def get_return_url(self, request, obj):
  74. return reverse('virtualization:cluster_list')
  75. class ClusterEditView(ClusterCreateView):
  76. permission_required = 'virtualization.change_cluster'
  77. class ClusterDeleteView(PermissionRequiredMixin, ObjectDeleteView):
  78. permission_required = 'virtualization.delete_cluster'
  79. model = Cluster
  80. default_return_url = 'virtualization:cluster_list'
  81. class ClusterBulkImportView(PermissionRequiredMixin, BulkImportView):
  82. permission_required = 'virtualization.add_cluster'
  83. model_form = forms.ClusterCSVForm
  84. table = tables.ClusterTable
  85. default_return_url = 'virtualization:cluster_list'
  86. class ClusterBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  87. permission_required = 'virtualization.delete_cluster'
  88. cls = Cluster
  89. queryset = Cluster.objects.annotate(vm_count=Count('virtual_machines'))
  90. table = tables.ClusterTable
  91. default_return_url = 'virtualization:cluster_list'
  92. #
  93. # Virtual machines
  94. #
  95. class VirtualMachineListView(ObjectListView):
  96. queryset = VirtualMachine.objects.select_related('tenant')
  97. # filter = filters.VirtualMachineFilter
  98. # filter_form = forms.VirtualMachineFilterForm
  99. table = tables.VirtualMachineTable
  100. template_name = 'virtualization/virtualmachine_list.html'
  101. class VirtualMachineView(View):
  102. def get(self, request, pk):
  103. vm = get_object_or_404(VirtualMachine.objects.select_related('tenant__group'), pk=pk)
  104. return render(request, 'virtualization/virtualmachine.html', {
  105. 'vm': vm,
  106. })
  107. class VirtualMachineCreateView(PermissionRequiredMixin, ObjectEditView):
  108. permission_required = 'virtualization.add_virtualmachine'
  109. model = VirtualMachine
  110. form_class = forms.VirtualMachineForm
  111. template_name = 'virtualization/virtualmachine_edit.html'
  112. default_return_url = 'virtualization:virtualmachine_list'
  113. class VirtualMachineEditView(VirtualMachineCreateView):
  114. permission_required = 'virtualization.change_virtualmachine'
  115. class VirtualMachineDeleteView(PermissionRequiredMixin, ObjectDeleteView):
  116. permission_required = 'virtualization.delete_virtualmachine'
  117. model = VirtualMachine
  118. default_return_url = 'virtualization:virtualmachine_list'
  119. class VirtualMachineBulkImportView(PermissionRequiredMixin, BulkImportView):
  120. permission_required = 'virtualization.add_virtualmachine'
  121. model_form = forms.VirtualMachineCSVForm
  122. table = tables.VirtualMachineTable
  123. default_return_url = 'virtualization:virtualmachine_list'
  124. class VirtualMachineBulkEditView(PermissionRequiredMixin, BulkEditView):
  125. permission_required = 'virtualization.change_virtualmachine'
  126. cls = VirtualMachine
  127. queryset = VirtualMachine.objects.select_related('tenant')
  128. # filter = filters.VirtualMachineFilter
  129. table = tables.VirtualMachineTable
  130. form = forms.VirtualMachineBulkEditForm
  131. default_return_url = 'virtualization:virtualmachine_list'
  132. #
  133. # VM interfaces
  134. #
  135. # class VMInterfaceCreateView(PermissionRequiredMixin, ComponentCreateView):
  136. # permission_required = 'virtualization.add_vminterface'
  137. # parent_model = VirtualMachine
  138. # parent_field = 'vm'
  139. # model = VMInterface
  140. # form = forms.VMInterfaceCreateForm
  141. # model_form = forms.VMInterfaceForm
  142. #
  143. #
  144. # class VMInterfaceEditView(PermissionRequiredMixin, ComponentEditView):
  145. # permission_required = 'virtualization.change_vminterface'
  146. # model = VMInterface
  147. # form_class = forms.VMInterfaceForm
  148. #
  149. #
  150. # class VMInterfaceDeleteView(PermissionRequiredMixin, ComponentDeleteView):
  151. # permission_required = 'virtualization.delete_vminterface'
  152. # model = VMInterface
  153. #
  154. #
  155. # class VMInterfaceBulkEditView(PermissionRequiredMixin, BulkEditView):
  156. # permission_required = 'virtualization.change_vminterface'
  157. # cls = VMInterface
  158. # parent_cls = VirtualMachine
  159. # table = tables.VMInterfaceTable
  160. # form = forms.VMInterfaceBulkEditForm
  161. #
  162. #
  163. # class VMInterfaceBulkDeleteView(PermissionRequiredMixin, BulkDeleteView):
  164. # permission_required = 'virtualization.delete_vminterface'
  165. # cls = VMInterface
  166. # parent_cls = VirtualMachine
  167. # table = tables.VMInterfaceTable