views.py 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500
  1. from ipam.tables import RouteTargetTable
  2. from netbox.views import generic
  3. from tenancy.views import ObjectContactsView
  4. from utilities.query import count_related
  5. from utilities.views import GetRelatedModelsMixin, register_model_view
  6. from . import filtersets, forms, tables
  7. from .models import *
  8. #
  9. # Tunnel groups
  10. #
  11. class TunnelGroupListView(generic.ObjectListView):
  12. queryset = TunnelGroup.objects.annotate(
  13. tunnel_count=count_related(Tunnel, 'group')
  14. )
  15. filterset = filtersets.TunnelGroupFilterSet
  16. filterset_form = forms.TunnelGroupFilterForm
  17. table = tables.TunnelGroupTable
  18. @register_model_view(TunnelGroup)
  19. class TunnelGroupView(GetRelatedModelsMixin, generic.ObjectView):
  20. queryset = TunnelGroup.objects.all()
  21. def get_extra_context(self, request, instance):
  22. return {
  23. 'related_models': self.get_related_models(request, instance),
  24. }
  25. @register_model_view(TunnelGroup, 'edit')
  26. class TunnelGroupEditView(generic.ObjectEditView):
  27. queryset = TunnelGroup.objects.all()
  28. form = forms.TunnelGroupForm
  29. @register_model_view(TunnelGroup, 'delete')
  30. class TunnelGroupDeleteView(generic.ObjectDeleteView):
  31. queryset = TunnelGroup.objects.all()
  32. class TunnelGroupBulkImportView(generic.BulkImportView):
  33. queryset = TunnelGroup.objects.all()
  34. model_form = forms.TunnelGroupImportForm
  35. class TunnelGroupBulkEditView(generic.BulkEditView):
  36. queryset = TunnelGroup.objects.annotate(
  37. tunnel_count=count_related(Tunnel, 'group')
  38. )
  39. filterset = filtersets.TunnelGroupFilterSet
  40. table = tables.TunnelGroupTable
  41. form = forms.TunnelGroupBulkEditForm
  42. class TunnelGroupBulkDeleteView(generic.BulkDeleteView):
  43. queryset = TunnelGroup.objects.annotate(
  44. tunnel_count=count_related(Tunnel, 'group')
  45. )
  46. filterset = filtersets.TunnelGroupFilterSet
  47. table = tables.TunnelGroupTable
  48. #
  49. # Tunnels
  50. #
  51. class TunnelListView(generic.ObjectListView):
  52. queryset = Tunnel.objects.annotate(
  53. count_terminations=count_related(TunnelTermination, 'tunnel')
  54. )
  55. filterset = filtersets.TunnelFilterSet
  56. filterset_form = forms.TunnelFilterForm
  57. table = tables.TunnelTable
  58. @register_model_view(Tunnel)
  59. class TunnelView(generic.ObjectView):
  60. queryset = Tunnel.objects.all()
  61. @register_model_view(Tunnel, 'edit')
  62. class TunnelEditView(generic.ObjectEditView):
  63. queryset = Tunnel.objects.all()
  64. form = forms.TunnelForm
  65. def dispatch(self, request, *args, **kwargs):
  66. # If creating a new Tunnel, use the creation form
  67. if 'pk' not in kwargs:
  68. self.form = forms.TunnelCreateForm
  69. return super().dispatch(request, *args, **kwargs)
  70. @register_model_view(Tunnel, 'delete')
  71. class TunnelDeleteView(generic.ObjectDeleteView):
  72. queryset = Tunnel.objects.all()
  73. class TunnelBulkImportView(generic.BulkImportView):
  74. queryset = Tunnel.objects.all()
  75. model_form = forms.TunnelImportForm
  76. class TunnelBulkEditView(generic.BulkEditView):
  77. queryset = Tunnel.objects.annotate(
  78. count_terminations=count_related(TunnelTermination, 'tunnel')
  79. )
  80. filterset = filtersets.TunnelFilterSet
  81. table = tables.TunnelTable
  82. form = forms.TunnelBulkEditForm
  83. class TunnelBulkDeleteView(generic.BulkDeleteView):
  84. queryset = Tunnel.objects.annotate(
  85. count_terminations=count_related(TunnelTermination, 'tunnel')
  86. )
  87. filterset = filtersets.TunnelFilterSet
  88. table = tables.TunnelTable
  89. #
  90. # Tunnel terminations
  91. #
  92. class TunnelTerminationListView(generic.ObjectListView):
  93. queryset = TunnelTermination.objects.all()
  94. filterset = filtersets.TunnelTerminationFilterSet
  95. filterset_form = forms.TunnelTerminationFilterForm
  96. table = tables.TunnelTerminationTable
  97. @register_model_view(TunnelTermination)
  98. class TunnelTerminationView(generic.ObjectView):
  99. queryset = TunnelTermination.objects.all()
  100. @register_model_view(TunnelTermination, 'edit')
  101. class TunnelTerminationEditView(generic.ObjectEditView):
  102. queryset = TunnelTermination.objects.all()
  103. form = forms.TunnelTerminationForm
  104. @register_model_view(TunnelTermination, 'delete')
  105. class TunnelTerminationDeleteView(generic.ObjectDeleteView):
  106. queryset = TunnelTermination.objects.all()
  107. class TunnelTerminationBulkImportView(generic.BulkImportView):
  108. queryset = TunnelTermination.objects.all()
  109. model_form = forms.TunnelTerminationImportForm
  110. class TunnelTerminationBulkEditView(generic.BulkEditView):
  111. queryset = TunnelTermination.objects.all()
  112. filterset = filtersets.TunnelTerminationFilterSet
  113. table = tables.TunnelTerminationTable
  114. form = forms.TunnelTerminationBulkEditForm
  115. class TunnelTerminationBulkDeleteView(generic.BulkDeleteView):
  116. queryset = TunnelTermination.objects.all()
  117. filterset = filtersets.TunnelTerminationFilterSet
  118. table = tables.TunnelTerminationTable
  119. #
  120. # IKE proposals
  121. #
  122. class IKEProposalListView(generic.ObjectListView):
  123. queryset = IKEProposal.objects.all()
  124. filterset = filtersets.IKEProposalFilterSet
  125. filterset_form = forms.IKEProposalFilterForm
  126. table = tables.IKEProposalTable
  127. @register_model_view(IKEProposal)
  128. class IKEProposalView(generic.ObjectView):
  129. queryset = IKEProposal.objects.all()
  130. @register_model_view(IKEProposal, 'edit')
  131. class IKEProposalEditView(generic.ObjectEditView):
  132. queryset = IKEProposal.objects.all()
  133. form = forms.IKEProposalForm
  134. @register_model_view(IKEProposal, 'delete')
  135. class IKEProposalDeleteView(generic.ObjectDeleteView):
  136. queryset = IKEProposal.objects.all()
  137. class IKEProposalBulkImportView(generic.BulkImportView):
  138. queryset = IKEProposal.objects.all()
  139. model_form = forms.IKEProposalImportForm
  140. class IKEProposalBulkEditView(generic.BulkEditView):
  141. queryset = IKEProposal.objects.all()
  142. filterset = filtersets.IKEProposalFilterSet
  143. table = tables.IKEProposalTable
  144. form = forms.IKEProposalBulkEditForm
  145. class IKEProposalBulkDeleteView(generic.BulkDeleteView):
  146. queryset = IKEProposal.objects.all()
  147. filterset = filtersets.IKEProposalFilterSet
  148. table = tables.IKEProposalTable
  149. #
  150. # IKE policies
  151. #
  152. class IKEPolicyListView(generic.ObjectListView):
  153. queryset = IKEPolicy.objects.all()
  154. filterset = filtersets.IKEPolicyFilterSet
  155. filterset_form = forms.IKEPolicyFilterForm
  156. table = tables.IKEPolicyTable
  157. @register_model_view(IKEPolicy)
  158. class IKEPolicyView(generic.ObjectView):
  159. queryset = IKEPolicy.objects.all()
  160. @register_model_view(IKEPolicy, 'edit')
  161. class IKEPolicyEditView(generic.ObjectEditView):
  162. queryset = IKEPolicy.objects.all()
  163. form = forms.IKEPolicyForm
  164. @register_model_view(IKEPolicy, 'delete')
  165. class IKEPolicyDeleteView(generic.ObjectDeleteView):
  166. queryset = IKEPolicy.objects.all()
  167. class IKEPolicyBulkImportView(generic.BulkImportView):
  168. queryset = IKEPolicy.objects.all()
  169. model_form = forms.IKEPolicyImportForm
  170. class IKEPolicyBulkEditView(generic.BulkEditView):
  171. queryset = IKEPolicy.objects.all()
  172. filterset = filtersets.IKEPolicyFilterSet
  173. table = tables.IKEPolicyTable
  174. form = forms.IKEPolicyBulkEditForm
  175. class IKEPolicyBulkDeleteView(generic.BulkDeleteView):
  176. queryset = IKEPolicy.objects.all()
  177. filterset = filtersets.IKEPolicyFilterSet
  178. table = tables.IKEPolicyTable
  179. #
  180. # IPSec proposals
  181. #
  182. class IPSecProposalListView(generic.ObjectListView):
  183. queryset = IPSecProposal.objects.all()
  184. filterset = filtersets.IPSecProposalFilterSet
  185. filterset_form = forms.IPSecProposalFilterForm
  186. table = tables.IPSecProposalTable
  187. @register_model_view(IPSecProposal)
  188. class IPSecProposalView(generic.ObjectView):
  189. queryset = IPSecProposal.objects.all()
  190. @register_model_view(IPSecProposal, 'edit')
  191. class IPSecProposalEditView(generic.ObjectEditView):
  192. queryset = IPSecProposal.objects.all()
  193. form = forms.IPSecProposalForm
  194. @register_model_view(IPSecProposal, 'delete')
  195. class IPSecProposalDeleteView(generic.ObjectDeleteView):
  196. queryset = IPSecProposal.objects.all()
  197. class IPSecProposalBulkImportView(generic.BulkImportView):
  198. queryset = IPSecProposal.objects.all()
  199. model_form = forms.IPSecProposalImportForm
  200. class IPSecProposalBulkEditView(generic.BulkEditView):
  201. queryset = IPSecProposal.objects.all()
  202. filterset = filtersets.IPSecProposalFilterSet
  203. table = tables.IPSecProposalTable
  204. form = forms.IPSecProposalBulkEditForm
  205. class IPSecProposalBulkDeleteView(generic.BulkDeleteView):
  206. queryset = IPSecProposal.objects.all()
  207. filterset = filtersets.IPSecProposalFilterSet
  208. table = tables.IPSecProposalTable
  209. #
  210. # IPSec policies
  211. #
  212. class IPSecPolicyListView(generic.ObjectListView):
  213. queryset = IPSecPolicy.objects.all()
  214. filterset = filtersets.IPSecPolicyFilterSet
  215. filterset_form = forms.IPSecPolicyFilterForm
  216. table = tables.IPSecPolicyTable
  217. @register_model_view(IPSecPolicy)
  218. class IPSecPolicyView(generic.ObjectView):
  219. queryset = IPSecPolicy.objects.all()
  220. @register_model_view(IPSecPolicy, 'edit')
  221. class IPSecPolicyEditView(generic.ObjectEditView):
  222. queryset = IPSecPolicy.objects.all()
  223. form = forms.IPSecPolicyForm
  224. @register_model_view(IPSecPolicy, 'delete')
  225. class IPSecPolicyDeleteView(generic.ObjectDeleteView):
  226. queryset = IPSecPolicy.objects.all()
  227. class IPSecPolicyBulkImportView(generic.BulkImportView):
  228. queryset = IPSecPolicy.objects.all()
  229. model_form = forms.IPSecPolicyImportForm
  230. class IPSecPolicyBulkEditView(generic.BulkEditView):
  231. queryset = IPSecPolicy.objects.all()
  232. filterset = filtersets.IPSecPolicyFilterSet
  233. table = tables.IPSecPolicyTable
  234. form = forms.IPSecPolicyBulkEditForm
  235. class IPSecPolicyBulkDeleteView(generic.BulkDeleteView):
  236. queryset = IPSecPolicy.objects.all()
  237. filterset = filtersets.IPSecPolicyFilterSet
  238. table = tables.IPSecPolicyTable
  239. #
  240. # IPSec profiles
  241. #
  242. class IPSecProfileListView(generic.ObjectListView):
  243. queryset = IPSecProfile.objects.all()
  244. filterset = filtersets.IPSecProfileFilterSet
  245. filterset_form = forms.IPSecProfileFilterForm
  246. table = tables.IPSecProfileTable
  247. @register_model_view(IPSecProfile)
  248. class IPSecProfileView(generic.ObjectView):
  249. queryset = IPSecProfile.objects.all()
  250. @register_model_view(IPSecProfile, 'edit')
  251. class IPSecProfileEditView(generic.ObjectEditView):
  252. queryset = IPSecProfile.objects.all()
  253. form = forms.IPSecProfileForm
  254. @register_model_view(IPSecProfile, 'delete')
  255. class IPSecProfileDeleteView(generic.ObjectDeleteView):
  256. queryset = IPSecProfile.objects.all()
  257. class IPSecProfileBulkImportView(generic.BulkImportView):
  258. queryset = IPSecProfile.objects.all()
  259. model_form = forms.IPSecProfileImportForm
  260. class IPSecProfileBulkEditView(generic.BulkEditView):
  261. queryset = IPSecProfile.objects.all()
  262. filterset = filtersets.IPSecProfileFilterSet
  263. table = tables.IPSecProfileTable
  264. form = forms.IPSecProfileBulkEditForm
  265. class IPSecProfileBulkDeleteView(generic.BulkDeleteView):
  266. queryset = IPSecProfile.objects.all()
  267. filterset = filtersets.IPSecProfileFilterSet
  268. table = tables.IPSecProfileTable
  269. # L2VPN
  270. class L2VPNListView(generic.ObjectListView):
  271. queryset = L2VPN.objects.all()
  272. table = tables.L2VPNTable
  273. filterset = filtersets.L2VPNFilterSet
  274. filterset_form = forms.L2VPNFilterForm
  275. @register_model_view(L2VPN)
  276. class L2VPNView(generic.ObjectView):
  277. queryset = L2VPN.objects.all()
  278. def get_extra_context(self, request, instance):
  279. import_targets_table = RouteTargetTable(
  280. instance.import_targets.prefetch_related('tenant'),
  281. orderable=False
  282. )
  283. export_targets_table = RouteTargetTable(
  284. instance.export_targets.prefetch_related('tenant'),
  285. orderable=False
  286. )
  287. return {
  288. 'import_targets_table': import_targets_table,
  289. 'export_targets_table': export_targets_table,
  290. }
  291. @register_model_view(L2VPN, 'edit')
  292. class L2VPNEditView(generic.ObjectEditView):
  293. queryset = L2VPN.objects.all()
  294. form = forms.L2VPNForm
  295. @register_model_view(L2VPN, 'delete')
  296. class L2VPNDeleteView(generic.ObjectDeleteView):
  297. queryset = L2VPN.objects.all()
  298. class L2VPNBulkImportView(generic.BulkImportView):
  299. queryset = L2VPN.objects.all()
  300. model_form = forms.L2VPNImportForm
  301. class L2VPNBulkEditView(generic.BulkEditView):
  302. queryset = L2VPN.objects.all()
  303. filterset = filtersets.L2VPNFilterSet
  304. table = tables.L2VPNTable
  305. form = forms.L2VPNBulkEditForm
  306. class L2VPNBulkDeleteView(generic.BulkDeleteView):
  307. queryset = L2VPN.objects.all()
  308. filterset = filtersets.L2VPNFilterSet
  309. table = tables.L2VPNTable
  310. @register_model_view(L2VPN, 'contacts')
  311. class L2VPNContactsView(ObjectContactsView):
  312. queryset = L2VPN.objects.all()
  313. #
  314. # L2VPN terminations
  315. #
  316. class L2VPNTerminationListView(generic.ObjectListView):
  317. queryset = L2VPNTermination.objects.all()
  318. table = tables.L2VPNTerminationTable
  319. filterset = filtersets.L2VPNTerminationFilterSet
  320. filterset_form = forms.L2VPNTerminationFilterForm
  321. @register_model_view(L2VPNTermination)
  322. class L2VPNTerminationView(generic.ObjectView):
  323. queryset = L2VPNTermination.objects.all()
  324. @register_model_view(L2VPNTermination, 'edit')
  325. class L2VPNTerminationEditView(generic.ObjectEditView):
  326. queryset = L2VPNTermination.objects.all()
  327. form = forms.L2VPNTerminationForm
  328. @register_model_view(L2VPNTermination, 'delete')
  329. class L2VPNTerminationDeleteView(generic.ObjectDeleteView):
  330. queryset = L2VPNTermination.objects.all()
  331. class L2VPNTerminationBulkImportView(generic.BulkImportView):
  332. queryset = L2VPNTermination.objects.all()
  333. model_form = forms.L2VPNTerminationImportForm
  334. class L2VPNTerminationBulkEditView(generic.BulkEditView):
  335. queryset = L2VPNTermination.objects.all()
  336. filterset = filtersets.L2VPNTerminationFilterSet
  337. table = tables.L2VPNTerminationTable
  338. form = forms.L2VPNTerminationBulkEditForm
  339. class L2VPNTerminationBulkDeleteView(generic.BulkDeleteView):
  340. queryset = L2VPNTermination.objects.all()
  341. filterset = filtersets.L2VPNTerminationFilterSet
  342. table = tables.L2VPNTerminationTable