urls.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. from django.urls import path
  2. from extras.views import ObjectChangeLogView, ImageAttachmentEditView
  3. from ipam.views import ServiceCreateView
  4. from secrets.views import secret_add
  5. from . import views
  6. from .models import (
  7. Cable, ConsolePort, ConsoleServerPort, Device, DeviceRole, DeviceType, FrontPort, Interface, Manufacturer, Platform,
  8. PowerFeed, PowerPanel, PowerPort, PowerOutlet, Rack, RackGroup, RackReservation, RackRole, RearPort, Region, Site,
  9. VirtualChassis,
  10. )
  11. app_name = 'dcim'
  12. urlpatterns = [
  13. # Regions
  14. path(r'regions/', views.RegionListView.as_view(), name='region_list'),
  15. path(r'regions/add/', views.RegionCreateView.as_view(), name='region_add'),
  16. path(r'regions/import/', views.RegionBulkImportView.as_view(), name='region_import'),
  17. path(r'regions/delete/', views.RegionBulkDeleteView.as_view(), name='region_bulk_delete'),
  18. path(r'regions/<int:pk>/edit/', views.RegionEditView.as_view(), name='region_edit'),
  19. path(r'regions/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='region_changelog', kwargs={'model': Region}),
  20. # Sites
  21. path(r'sites/', views.SiteListView.as_view(), name='site_list'),
  22. path(r'sites/add/', views.SiteCreateView.as_view(), name='site_add'),
  23. path(r'sites/import/', views.SiteBulkImportView.as_view(), name='site_import'),
  24. path(r'sites/edit/', views.SiteBulkEditView.as_view(), name='site_bulk_edit'),
  25. path(r'sites/delete/', views.SiteBulkDeleteView.as_view(), name='site_bulk_delete'),
  26. path(r'sites/<slug:slug>/', views.SiteView.as_view(), name='site'),
  27. path(r'sites/<slug:slug>/edit/', views.SiteEditView.as_view(), name='site_edit'),
  28. path(r'sites/<slug:slug>/delete/', views.SiteDeleteView.as_view(), name='site_delete'),
  29. path(r'sites/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='site_changelog', kwargs={'model': Site}),
  30. path(r'sites/<int:object_id>/images/add/', ImageAttachmentEditView.as_view(), name='site_add_image', kwargs={'model': Site}),
  31. # Rack groups
  32. path(r'rack-groups/', views.RackGroupListView.as_view(), name='rackgroup_list'),
  33. path(r'rack-groups/add/', views.RackGroupCreateView.as_view(), name='rackgroup_add'),
  34. path(r'rack-groups/import/', views.RackGroupBulkImportView.as_view(), name='rackgroup_import'),
  35. path(r'rack-groups/delete/', views.RackGroupBulkDeleteView.as_view(), name='rackgroup_bulk_delete'),
  36. path(r'rack-groups/<int:pk>/edit/', views.RackGroupEditView.as_view(), name='rackgroup_edit'),
  37. path(r'rack-groups/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='rackgroup_changelog', kwargs={'model': RackGroup}),
  38. # Rack roles
  39. path(r'rack-roles/', views.RackRoleListView.as_view(), name='rackrole_list'),
  40. path(r'rack-roles/add/', views.RackRoleCreateView.as_view(), name='rackrole_add'),
  41. path(r'rack-roles/import/', views.RackRoleBulkImportView.as_view(), name='rackrole_import'),
  42. path(r'rack-roles/delete/', views.RackRoleBulkDeleteView.as_view(), name='rackrole_bulk_delete'),
  43. path(r'rack-roles/<int:pk>/edit/', views.RackRoleEditView.as_view(), name='rackrole_edit'),
  44. path(r'rack-roles/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='rackrole_changelog', kwargs={'model': RackRole}),
  45. # Rack reservations
  46. path(r'rack-reservations/', views.RackReservationListView.as_view(), name='rackreservation_list'),
  47. path(r'rack-reservations/edit/', views.RackReservationBulkEditView.as_view(), name='rackreservation_bulk_edit'),
  48. path(r'rack-reservations/delete/', views.RackReservationBulkDeleteView.as_view(), name='rackreservation_bulk_delete'),
  49. path(r'rack-reservations/<int:pk>/edit/', views.RackReservationEditView.as_view(), name='rackreservation_edit'),
  50. path(r'rack-reservations/<int:pk>/delete/', views.RackReservationDeleteView.as_view(), name='rackreservation_delete'),
  51. path(r'rack-reservations/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='rackreservation_changelog', kwargs={'model': RackReservation}),
  52. # Racks
  53. path(r'racks/', views.RackListView.as_view(), name='rack_list'),
  54. path(r'rack-elevations/', views.RackElevationListView.as_view(), name='rack_elevation_list'),
  55. path(r'racks/add/', views.RackCreateView.as_view(), name='rack_add'),
  56. path(r'racks/import/', views.RackBulkImportView.as_view(), name='rack_import'),
  57. path(r'racks/edit/', views.RackBulkEditView.as_view(), name='rack_bulk_edit'),
  58. path(r'racks/delete/', views.RackBulkDeleteView.as_view(), name='rack_bulk_delete'),
  59. path(r'racks/<int:pk>/', views.RackView.as_view(), name='rack'),
  60. path(r'racks/<int:pk>/edit/', views.RackEditView.as_view(), name='rack_edit'),
  61. path(r'racks/<int:pk>/delete/', views.RackDeleteView.as_view(), name='rack_delete'),
  62. path(r'racks/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='rack_changelog', kwargs={'model': Rack}),
  63. path(r'racks/<int:rack>/reservations/add/', views.RackReservationCreateView.as_view(), name='rack_add_reservation'),
  64. path(r'racks/<int:object_id>/images/add/', ImageAttachmentEditView.as_view(), name='rack_add_image', kwargs={'model': Rack}),
  65. # Manufacturers
  66. path(r'manufacturers/', views.ManufacturerListView.as_view(), name='manufacturer_list'),
  67. path(r'manufacturers/add/', views.ManufacturerCreateView.as_view(), name='manufacturer_add'),
  68. path(r'manufacturers/import/', views.ManufacturerBulkImportView.as_view(), name='manufacturer_import'),
  69. path(r'manufacturers/delete/', views.ManufacturerBulkDeleteView.as_view(), name='manufacturer_bulk_delete'),
  70. path(r'manufacturers/<slug:slug>/edit/', views.ManufacturerEditView.as_view(), name='manufacturer_edit'),
  71. path(r'manufacturers/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='manufacturer_changelog', kwargs={'model': Manufacturer}),
  72. # Device types
  73. path(r'device-types/', views.DeviceTypeListView.as_view(), name='devicetype_list'),
  74. path(r'device-types/add/', views.DeviceTypeCreateView.as_view(), name='devicetype_add'),
  75. path(r'device-types/import/', views.DeviceTypeImportView.as_view(), name='devicetype_import'),
  76. path(r'device-types/edit/', views.DeviceTypeBulkEditView.as_view(), name='devicetype_bulk_edit'),
  77. path(r'device-types/delete/', views.DeviceTypeBulkDeleteView.as_view(), name='devicetype_bulk_delete'),
  78. path(r'device-types/<int:pk>/', views.DeviceTypeView.as_view(), name='devicetype'),
  79. path(r'device-types/<int:pk>/edit/', views.DeviceTypeEditView.as_view(), name='devicetype_edit'),
  80. path(r'device-types/<int:pk>/delete/', views.DeviceTypeDeleteView.as_view(), name='devicetype_delete'),
  81. path(r'device-types/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='devicetype_changelog', kwargs={'model': DeviceType}),
  82. # Console port templates
  83. path(r'device-types/<int:pk>/console-ports/add/', views.ConsolePortTemplateCreateView.as_view(), name='devicetype_add_consoleport'),
  84. path(r'device-types/<int:pk>/console-ports/delete/', views.ConsolePortTemplateBulkDeleteView.as_view(), name='devicetype_delete_consoleport'),
  85. path(r'console-port-templates/<int:pk>/edit/', views.ConsolePortTemplateEditView.as_view(), name='consoleporttemplate_edit'),
  86. # Console server port templates
  87. path(r'device-types/<int:pk>/console-server-ports/add/', views.ConsoleServerPortTemplateCreateView.as_view(), name='devicetype_add_consoleserverport'),
  88. path(r'device-types/<int:pk>/console-server-ports/delete/', views.ConsoleServerPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_consoleserverport'),
  89. path(r'console-server-port-templates/<int:pk>/edit/', views.ConsoleServerPortTemplateEditView.as_view(), name='consoleserverporttemplate_edit'),
  90. # Power port templates
  91. path(r'device-types/<int:pk>/power-ports/add/', views.PowerPortTemplateCreateView.as_view(), name='devicetype_add_powerport'),
  92. path(r'device-types/<int:pk>/power-ports/delete/', views.PowerPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_powerport'),
  93. path(r'power-port-templates/<int:pk>/edit/', views.PowerPortTemplateEditView.as_view(), name='powerporttemplate_edit'),
  94. # Power outlet templates
  95. path(r'device-types/<int:pk>/power-outlets/add/', views.PowerOutletTemplateCreateView.as_view(), name='devicetype_add_poweroutlet'),
  96. path(r'device-types/<int:pk>/power-outlets/delete/', views.PowerOutletTemplateBulkDeleteView.as_view(), name='devicetype_delete_poweroutlet'),
  97. path(r'power-outlet-templates/<int:pk>/edit/', views.PowerOutletTemplateEditView.as_view(), name='poweroutlettemplate_edit'),
  98. # Interface templates
  99. path(r'device-types/<int:pk>/interfaces/add/', views.InterfaceTemplateCreateView.as_view(), name='devicetype_add_interface'),
  100. path(r'device-types/<int:pk>/interfaces/edit/', views.InterfaceTemplateBulkEditView.as_view(), name='devicetype_bulkedit_interface'),
  101. path(r'device-types/<int:pk>/interfaces/delete/', views.InterfaceTemplateBulkDeleteView.as_view(), name='devicetype_delete_interface'),
  102. path(r'interface-templates/<int:pk>/edit/', views.InterfaceTemplateEditView.as_view(), name='interfacetemplate_edit'),
  103. # Front port templates
  104. path(r'device-types/<int:pk>/front-ports/add/', views.FrontPortTemplateCreateView.as_view(), name='devicetype_add_frontport'),
  105. path(r'device-types/<int:pk>/front-ports/delete/', views.FrontPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_frontport'),
  106. path(r'front-port-templates/<int:pk>/edit/', views.FrontPortTemplateEditView.as_view(), name='frontporttemplate_edit'),
  107. # Rear port templates
  108. path(r'device-types/<int:pk>/rear-ports/add/', views.RearPortTemplateCreateView.as_view(), name='devicetype_add_rearport'),
  109. path(r'device-types/<int:pk>/rear-ports/delete/', views.RearPortTemplateBulkDeleteView.as_view(), name='devicetype_delete_rearport'),
  110. path(r'rear-port-templates/<int:pk>/edit/', views.RearPortTemplateEditView.as_view(), name='rearporttemplate_edit'),
  111. # Device bay templates
  112. path(r'device-types/<int:pk>/device-bays/add/', views.DeviceBayTemplateCreateView.as_view(), name='devicetype_add_devicebay'),
  113. path(r'device-types/<int:pk>/device-bays/delete/', views.DeviceBayTemplateBulkDeleteView.as_view(), name='devicetype_delete_devicebay'),
  114. path(r'device-bay-templates/<int:pk>/edit/', views.DeviceBayTemplateEditView.as_view(), name='devicebaytemplate_edit'),
  115. # Device roles
  116. path(r'device-roles/', views.DeviceRoleListView.as_view(), name='devicerole_list'),
  117. path(r'device-roles/add/', views.DeviceRoleCreateView.as_view(), name='devicerole_add'),
  118. path(r'device-roles/import/', views.DeviceRoleBulkImportView.as_view(), name='devicerole_import'),
  119. path(r'device-roles/delete/', views.DeviceRoleBulkDeleteView.as_view(), name='devicerole_bulk_delete'),
  120. path(r'device-roles/<slug:slug>/edit/', views.DeviceRoleEditView.as_view(), name='devicerole_edit'),
  121. path(r'device-roles/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='devicerole_changelog', kwargs={'model': DeviceRole}),
  122. # Platforms
  123. path(r'platforms/', views.PlatformListView.as_view(), name='platform_list'),
  124. path(r'platforms/add/', views.PlatformCreateView.as_view(), name='platform_add'),
  125. path(r'platforms/import/', views.PlatformBulkImportView.as_view(), name='platform_import'),
  126. path(r'platforms/delete/', views.PlatformBulkDeleteView.as_view(), name='platform_bulk_delete'),
  127. path(r'platforms/<slug:slug>/edit/', views.PlatformEditView.as_view(), name='platform_edit'),
  128. path(r'platforms/<slug:slug>/changelog/', ObjectChangeLogView.as_view(), name='platform_changelog', kwargs={'model': Platform}),
  129. # Devices
  130. path(r'devices/', views.DeviceListView.as_view(), name='device_list'),
  131. path(r'devices/add/', views.DeviceCreateView.as_view(), name='device_add'),
  132. path(r'devices/import/', views.DeviceBulkImportView.as_view(), name='device_import'),
  133. path(r'devices/import/child-devices/', views.ChildDeviceBulkImportView.as_view(), name='device_import_child'),
  134. path(r'devices/edit/', views.DeviceBulkEditView.as_view(), name='device_bulk_edit'),
  135. path(r'devices/delete/', views.DeviceBulkDeleteView.as_view(), name='device_bulk_delete'),
  136. path(r'devices/<int:pk>/', views.DeviceView.as_view(), name='device'),
  137. path(r'devices/<int:pk>/edit/', views.DeviceEditView.as_view(), name='device_edit'),
  138. path(r'devices/<int:pk>/delete/', views.DeviceDeleteView.as_view(), name='device_delete'),
  139. path(r'devices/<int:pk>/config-context/', views.DeviceConfigContextView.as_view(), name='device_configcontext'),
  140. path(r'devices/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='device_changelog', kwargs={'model': Device}),
  141. path(r'devices/<int:pk>/inventory/', views.DeviceInventoryView.as_view(), name='device_inventory'),
  142. path(r'devices/<int:pk>/status/', views.DeviceStatusView.as_view(), name='device_status'),
  143. path(r'devices/<int:pk>/lldp-neighbors/', views.DeviceLLDPNeighborsView.as_view(), name='device_lldp_neighbors'),
  144. path(r'devices/<int:pk>/config/', views.DeviceConfigView.as_view(), name='device_config'),
  145. path(r'devices/<int:pk>/add-secret/', secret_add, name='device_addsecret'),
  146. path(r'devices/<int:device>/services/assign/', ServiceCreateView.as_view(), name='device_service_assign'),
  147. path(r'devices/<int:object_id>/images/add/', ImageAttachmentEditView.as_view(), name='device_add_image', kwargs={'model': Device}),
  148. # Console ports
  149. path(r'devices/console-ports/add/', views.DeviceBulkAddConsolePortView.as_view(), name='device_bulk_add_consoleport'),
  150. path(r'devices/<int:pk>/console-ports/add/', views.ConsolePortCreateView.as_view(), name='consoleport_add'),
  151. path(r'console-ports/', views.ConsolePortListView.as_view(), name='consoleport_list'),
  152. path(r'console-ports/import/', views.ConsolePortBulkImportView.as_view(), name='consoleport_import'),
  153. # TODO: Bulk edit view for ConsolePorts
  154. path(r'console-ports/delete/', views.ConsolePortBulkDeleteView.as_view(), name='consoleport_bulk_delete'),
  155. path(r'console-ports/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='consoleport_connect', kwargs={'termination_a_type': ConsolePort}),
  156. path(r'console-ports/<int:pk>/edit/', views.ConsolePortEditView.as_view(), name='consoleport_edit'),
  157. path(r'console-ports/<int:pk>/delete/', views.ConsolePortDeleteView.as_view(), name='consoleport_delete'),
  158. path(r'console-ports/<int:pk>/trace/', views.CableTraceView.as_view(), name='consoleport_trace', kwargs={'model': ConsolePort}),
  159. # Console server ports
  160. path(r'devices/console-server-ports/add/', views.DeviceBulkAddConsoleServerPortView.as_view(), name='device_bulk_add_consoleserverport'),
  161. path(r'devices/<int:pk>/console-server-ports/add/', views.ConsoleServerPortCreateView.as_view(), name='consoleserverport_add'),
  162. path(r'console-server-ports/', views.ConsoleServerPortListView.as_view(), name='consoleserverport_list'),
  163. path(r'console-server-ports/rename/', views.ConsoleServerPortBulkRenameView.as_view(), name='consoleserverport_bulk_rename'),
  164. path(r'console-server-ports/disconnect/', views.ConsoleServerPortBulkDisconnectView.as_view(), name='consoleserverport_bulk_disconnect'),
  165. path(r'console-server-ports/import/', views.ConsoleServerPortBulkImportView.as_view(), name='consoleserverport_import'),
  166. path(r'console-server-ports/edit/', views.ConsoleServerPortBulkEditView.as_view(), name='consoleserverport_bulk_edit'),
  167. path(r'console-server-ports/delete/', views.ConsoleServerPortBulkDeleteView.as_view(), name='consoleserverport_bulk_delete'),
  168. path(r'console-server-ports/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='consoleserverport_connect', kwargs={'termination_a_type': ConsoleServerPort}),
  169. path(r'console-server-ports/<int:pk>/edit/', views.ConsoleServerPortEditView.as_view(), name='consoleserverport_edit'),
  170. path(r'console-server-ports/<int:pk>/delete/', views.ConsoleServerPortDeleteView.as_view(), name='consoleserverport_delete'),
  171. path(r'console-server-ports/<int:pk>/trace/', views.CableTraceView.as_view(), name='consoleserverport_trace', kwargs={'model': ConsoleServerPort}),
  172. # Power ports
  173. path(r'devices/power-ports/add/', views.DeviceBulkAddPowerPortView.as_view(), name='device_bulk_add_powerport'),
  174. path(r'devices/<int:pk>/power-ports/add/', views.PowerPortCreateView.as_view(), name='powerport_add'),
  175. path(r'power-ports/', views.PowerPortListView.as_view(), name='powerport_list'),
  176. path(r'power-ports/import/', views.PowerPortBulkImportView.as_view(), name='powerport_import'),
  177. # TODO: Bulk edit view for PowerPorts
  178. path(r'power-ports/delete/', views.PowerPortBulkDeleteView.as_view(), name='powerport_bulk_delete'),
  179. path(r'power-ports/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='powerport_connect', kwargs={'termination_a_type': PowerPort}),
  180. path(r'power-ports/<int:pk>/edit/', views.PowerPortEditView.as_view(), name='powerport_edit'),
  181. path(r'power-ports/<int:pk>/delete/', views.PowerPortDeleteView.as_view(), name='powerport_delete'),
  182. path(r'power-ports/<int:pk>/trace/', views.CableTraceView.as_view(), name='powerport_trace', kwargs={'model': PowerPort}),
  183. # Power outlets
  184. path(r'devices/power-outlets/add/', views.DeviceBulkAddPowerOutletView.as_view(), name='device_bulk_add_poweroutlet'),
  185. path(r'devices/<int:pk>/power-outlets/add/', views.PowerOutletCreateView.as_view(), name='poweroutlet_add'),
  186. path(r'power-outlets/', views.PowerOutletListView.as_view(), name='poweroutlet_list'),
  187. path(r'power-outlets/rename/', views.PowerOutletBulkRenameView.as_view(), name='poweroutlet_bulk_rename'),
  188. path(r'power-outlets/disconnect/', views.PowerOutletBulkDisconnectView.as_view(), name='poweroutlet_bulk_disconnect'),
  189. path(r'power-outlets/import/', views.PowerOutletBulkImportView.as_view(), name='poweroutlet_import'),
  190. path(r'power-outlets/edit/', views.PowerOutletBulkEditView.as_view(), name='poweroutlet_bulk_edit'),
  191. path(r'power-outlets/delete/', views.PowerOutletBulkDeleteView.as_view(), name='poweroutlet_bulk_delete'),
  192. path(r'power-outlets/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='poweroutlet_connect', kwargs={'termination_a_type': PowerOutlet}),
  193. path(r'power-outlets/<int:pk>/edit/', views.PowerOutletEditView.as_view(), name='poweroutlet_edit'),
  194. path(r'power-outlets/<int:pk>/delete/', views.PowerOutletDeleteView.as_view(), name='poweroutlet_delete'),
  195. path(r'power-outlets/<int:pk>/trace/', views.CableTraceView.as_view(), name='poweroutlet_trace', kwargs={'model': PowerOutlet}),
  196. # Interfaces
  197. path(r'devices/interfaces/add/', views.DeviceBulkAddInterfaceView.as_view(), name='device_bulk_add_interface'),
  198. path(r'devices/<int:pk>/interfaces/add/', views.InterfaceCreateView.as_view(), name='interface_add'),
  199. path(r'interfaces/', views.InterfaceListView.as_view(), name='interface_list'),
  200. path(r'interfaces/rename/', views.InterfaceBulkRenameView.as_view(), name='interface_bulk_rename'),
  201. path(r'interfaces/disconnect/', views.InterfaceBulkDisconnectView.as_view(), name='interface_bulk_disconnect'),
  202. path(r'interfaces/import/', views.InterfaceBulkImportView.as_view(), name='interface_import'),
  203. path(r'interfaces/edit/', views.InterfaceBulkEditView.as_view(), name='interface_bulk_edit'),
  204. path(r'interfaces/delete/', views.InterfaceBulkDeleteView.as_view(), name='interface_bulk_delete'),
  205. path(r'interfaces/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='interface_connect', kwargs={'termination_a_type': Interface}),
  206. path(r'interfaces/<int:pk>/', views.InterfaceView.as_view(), name='interface'),
  207. path(r'interfaces/<int:pk>/edit/', views.InterfaceEditView.as_view(), name='interface_edit'),
  208. path(r'interfaces/<int:pk>/delete/', views.InterfaceDeleteView.as_view(), name='interface_delete'),
  209. path(r'interfaces/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='interface_changelog', kwargs={'model': Interface}),
  210. path(r'interfaces/<int:pk>/trace/', views.CableTraceView.as_view(), name='interface_trace', kwargs={'model': Interface}),
  211. # Front ports
  212. # path(r'devices/front-ports/add/', views.DeviceBulkAddFrontPortView.as_view(), name='device_bulk_add_frontport'),
  213. path(r'devices/<int:pk>/front-ports/add/', views.FrontPortCreateView.as_view(), name='frontport_add'),
  214. path(r'front-ports/', views.FrontPortListView.as_view(), name='frontport_list'),
  215. path(r'front-ports/rename/', views.FrontPortBulkRenameView.as_view(), name='frontport_bulk_rename'),
  216. path(r'front-ports/disconnect/', views.FrontPortBulkDisconnectView.as_view(), name='frontport_bulk_disconnect'),
  217. path(r'front-ports/import/', views.FrontPortBulkImportView.as_view(), name='frontport_import'),
  218. path(r'front-ports/edit/', views.FrontPortBulkEditView.as_view(), name='frontport_bulk_edit'),
  219. path(r'front-ports/delete/', views.FrontPortBulkDeleteView.as_view(), name='frontport_bulk_delete'),
  220. path(r'front-ports/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='frontport_connect', kwargs={'termination_a_type': FrontPort}),
  221. path(r'front-ports/<int:pk>/edit/', views.FrontPortEditView.as_view(), name='frontport_edit'),
  222. path(r'front-ports/<int:pk>/delete/', views.FrontPortDeleteView.as_view(), name='frontport_delete'),
  223. path(r'front-ports/<int:pk>/trace/', views.CableTraceView.as_view(), name='frontport_trace', kwargs={'model': FrontPort}),
  224. # Rear ports
  225. # path(r'devices/rear-ports/add/', views.DeviceBulkAddRearPortView.as_view(), name='device_bulk_add_rearport'),
  226. path(r'devices/<int:pk>/rear-ports/add/', views.RearPortCreateView.as_view(), name='rearport_add'),
  227. path(r'rear-ports/', views.RearPortListView.as_view(), name='rearport_list'),
  228. path(r'rear-ports/rename/', views.RearPortBulkRenameView.as_view(), name='rearport_bulk_rename'),
  229. path(r'rear-ports/disconnect/', views.RearPortBulkDisconnectView.as_view(), name='rearport_bulk_disconnect'),
  230. path(r'rear-ports/import/', views.RearPortBulkImportView.as_view(), name='rearport_import'),
  231. path(r'rear-ports/edit/', views.RearPortBulkEditView.as_view(), name='rearport_bulk_edit'),
  232. path(r'rear-ports/delete/', views.RearPortBulkDeleteView.as_view(), name='rearport_bulk_delete'),
  233. path(r'rear-ports/<int:termination_a_id>/connect/<str:termination_b_type>/', views.CableCreateView.as_view(), name='rearport_connect', kwargs={'termination_a_type': RearPort}),
  234. path(r'rear-ports/<int:pk>/edit/', views.RearPortEditView.as_view(), name='rearport_edit'),
  235. path(r'rear-ports/<int:pk>/delete/', views.RearPortDeleteView.as_view(), name='rearport_delete'),
  236. path(r'rear-ports/<int:pk>/trace/', views.CableTraceView.as_view(), name='rearport_trace', kwargs={'model': RearPort}),
  237. # Device bays
  238. path(r'devices/device-bays/add/', views.DeviceBulkAddDeviceBayView.as_view(), name='device_bulk_add_devicebay'),
  239. path(r'devices/<int:pk>/bays/add/', views.DeviceBayCreateView.as_view(), name='devicebay_add'),
  240. path(r'device-bays/', views.DeviceBayListView.as_view(), name='devicebay_list'),
  241. path(r'device-bays/rename/', views.DeviceBayBulkRenameView.as_view(), name='devicebay_bulk_rename'),
  242. path(r'device-bays/import/', views.DeviceBayBulkImportView.as_view(), name='devicebay_import'),
  243. # TODO: Bulk edit view for DeviceBays
  244. path(r'device-bays/delete/', views.DeviceBayBulkDeleteView.as_view(), name='devicebay_bulk_delete'),
  245. path(r'device-bays/<int:pk>/edit/', views.DeviceBayEditView.as_view(), name='devicebay_edit'),
  246. path(r'device-bays/<int:pk>/delete/', views.DeviceBayDeleteView.as_view(), name='devicebay_delete'),
  247. path(r'device-bays/<int:pk>/populate/', views.DeviceBayPopulateView.as_view(), name='devicebay_populate'),
  248. path(r'device-bays/<int:pk>/depopulate/', views.DeviceBayDepopulateView.as_view(), name='devicebay_depopulate'),
  249. # Inventory items
  250. path(r'inventory-items/', views.InventoryItemListView.as_view(), name='inventoryitem_list'),
  251. path(r'inventory-items/import/', views.InventoryItemBulkImportView.as_view(), name='inventoryitem_import'),
  252. path(r'inventory-items/edit/', views.InventoryItemBulkEditView.as_view(), name='inventoryitem_bulk_edit'),
  253. path(r'inventory-items/delete/', views.InventoryItemBulkDeleteView.as_view(), name='inventoryitem_bulk_delete'),
  254. path(r'inventory-items/<int:pk>/edit/', views.InventoryItemEditView.as_view(), name='inventoryitem_edit'),
  255. path(r'inventory-items/<int:pk>/delete/', views.InventoryItemDeleteView.as_view(), name='inventoryitem_delete'),
  256. path(r'devices/<int:device>/inventory-items/add/', views.InventoryItemEditView.as_view(), name='inventoryitem_add'),
  257. # Cables
  258. path(r'cables/', views.CableListView.as_view(), name='cable_list'),
  259. path(r'cables/import/', views.CableBulkImportView.as_view(), name='cable_import'),
  260. path(r'cables/edit/', views.CableBulkEditView.as_view(), name='cable_bulk_edit'),
  261. path(r'cables/delete/', views.CableBulkDeleteView.as_view(), name='cable_bulk_delete'),
  262. path(r'cables/<int:pk>/', views.CableView.as_view(), name='cable'),
  263. path(r'cables/<int:pk>/edit/', views.CableEditView.as_view(), name='cable_edit'),
  264. path(r'cables/<int:pk>/delete/', views.CableDeleteView.as_view(), name='cable_delete'),
  265. path(r'cables/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='cable_changelog', kwargs={'model': Cable}),
  266. # Console/power/interface connections (read-only)
  267. path(r'console-connections/', views.ConsoleConnectionsListView.as_view(), name='console_connections_list'),
  268. path(r'power-connections/', views.PowerConnectionsListView.as_view(), name='power_connections_list'),
  269. path(r'interface-connections/', views.InterfaceConnectionsListView.as_view(), name='interface_connections_list'),
  270. # Virtual chassis
  271. path(r'virtual-chassis/', views.VirtualChassisListView.as_view(), name='virtualchassis_list'),
  272. path(r'virtual-chassis/add/', views.VirtualChassisCreateView.as_view(), name='virtualchassis_add'),
  273. path(r'virtual-chassis/<int:pk>/edit/', views.VirtualChassisEditView.as_view(), name='virtualchassis_edit'),
  274. path(r'virtual-chassis/<int:pk>/delete/', views.VirtualChassisDeleteView.as_view(), name='virtualchassis_delete'),
  275. path(r'virtual-chassis/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='virtualchassis_changelog', kwargs={'model': VirtualChassis}),
  276. path(r'virtual-chassis/<int:pk>/add-member/', views.VirtualChassisAddMemberView.as_view(), name='virtualchassis_add_member'),
  277. path(r'virtual-chassis-members/<int:pk>/delete/', views.VirtualChassisRemoveMemberView.as_view(), name='virtualchassis_remove_member'),
  278. # Power panels
  279. path(r'power-panels/', views.PowerPanelListView.as_view(), name='powerpanel_list'),
  280. path(r'power-panels/add/', views.PowerPanelCreateView.as_view(), name='powerpanel_add'),
  281. path(r'power-panels/import/', views.PowerPanelBulkImportView.as_view(), name='powerpanel_import'),
  282. path(r'power-panels/delete/', views.PowerPanelBulkDeleteView.as_view(), name='powerpanel_bulk_delete'),
  283. path(r'power-panels/<int:pk>/', views.PowerPanelView.as_view(), name='powerpanel'),
  284. path(r'power-panels/<int:pk>/edit/', views.PowerPanelEditView.as_view(), name='powerpanel_edit'),
  285. path(r'power-panels/<int:pk>/delete/', views.PowerPanelDeleteView.as_view(), name='powerpanel_delete'),
  286. path(r'power-panels/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='powerpanel_changelog', kwargs={'model': PowerPanel}),
  287. # Power feeds
  288. path(r'power-feeds/', views.PowerFeedListView.as_view(), name='powerfeed_list'),
  289. path(r'power-feeds/add/', views.PowerFeedCreateView.as_view(), name='powerfeed_add'),
  290. path(r'power-feeds/import/', views.PowerFeedBulkImportView.as_view(), name='powerfeed_import'),
  291. path(r'power-feeds/edit/', views.PowerFeedBulkEditView.as_view(), name='powerfeed_bulk_edit'),
  292. path(r'power-feeds/delete/', views.PowerFeedBulkDeleteView.as_view(), name='powerfeed_bulk_delete'),
  293. path(r'power-feeds/<int:pk>/', views.PowerFeedView.as_view(), name='powerfeed'),
  294. path(r'power-feeds/<int:pk>/edit/', views.PowerFeedEditView.as_view(), name='powerfeed_edit'),
  295. path(r'power-feeds/<int:pk>/delete/', views.PowerFeedDeleteView.as_view(), name='powerfeed_delete'),
  296. path(r'power-feeds/<int:pk>/changelog/', ObjectChangeLogView.as_view(), name='powerfeed_changelog', kwargs={'model': PowerFeed}),
  297. ]