views.py 14 KB

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