connections.py 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278
  1. from circuits.models import Circuit, CircuitTermination, Provider
  2. from dcim.models import *
  3. from netbox.forms import NetBoxModelForm
  4. from tenancy.forms import TenancyForm
  5. from utilities.forms import DynamicModelChoiceField, StaticSelect
  6. __all__ = (
  7. 'ConnectCableToCircuitTerminationForm',
  8. 'ConnectCableToConsolePortForm',
  9. 'ConnectCableToConsoleServerPortForm',
  10. 'ConnectCableToFrontPortForm',
  11. 'ConnectCableToInterfaceForm',
  12. 'ConnectCableToPowerFeedForm',
  13. 'ConnectCableToPowerPortForm',
  14. 'ConnectCableToPowerOutletForm',
  15. 'ConnectCableToRearPortForm',
  16. )
  17. class ConnectCableToDeviceForm(TenancyForm, NetBoxModelForm):
  18. """
  19. Base form for connecting a Cable to a Device component
  20. """
  21. termination_b_region = DynamicModelChoiceField(
  22. queryset=Region.objects.all(),
  23. label='Region',
  24. required=False
  25. )
  26. termination_b_sitegroup = DynamicModelChoiceField(
  27. queryset=SiteGroup.objects.all(),
  28. label='Site group',
  29. required=False
  30. )
  31. termination_b_site = DynamicModelChoiceField(
  32. queryset=Site.objects.all(),
  33. label='Site',
  34. required=False,
  35. query_params={
  36. 'region_id': '$termination_b_region',
  37. 'group_id': '$termination_b_sitegroup',
  38. }
  39. )
  40. termination_b_location = DynamicModelChoiceField(
  41. queryset=Location.objects.all(),
  42. label='Location',
  43. required=False,
  44. null_option='None',
  45. query_params={
  46. 'site_id': '$termination_b_site'
  47. }
  48. )
  49. termination_b_rack = DynamicModelChoiceField(
  50. queryset=Rack.objects.all(),
  51. label='Rack',
  52. required=False,
  53. null_option='None',
  54. query_params={
  55. 'site_id': '$termination_b_site',
  56. 'location_id': '$termination_b_location',
  57. }
  58. )
  59. termination_b_device = DynamicModelChoiceField(
  60. queryset=Device.objects.all(),
  61. label='Device',
  62. required=False,
  63. query_params={
  64. 'site_id': '$termination_b_site',
  65. 'location_id': '$termination_b_location',
  66. 'rack_id': '$termination_b_rack',
  67. }
  68. )
  69. class Meta:
  70. model = Cable
  71. fields = [
  72. 'termination_b_region', 'termination_b_sitegroup', 'termination_b_site', 'termination_b_rack',
  73. 'termination_b_device', 'termination_b_id', 'type', 'status', 'tenant_group', 'tenant', 'label', 'color',
  74. 'length', 'length_unit', 'tags',
  75. ]
  76. widgets = {
  77. 'status': StaticSelect,
  78. 'type': StaticSelect,
  79. 'length_unit': StaticSelect,
  80. }
  81. def clean_termination_b_id(self):
  82. # Return the PK rather than the object
  83. return getattr(self.cleaned_data['termination_b_id'], 'pk', None)
  84. class ConnectCableToConsolePortForm(ConnectCableToDeviceForm):
  85. termination_b_id = DynamicModelChoiceField(
  86. queryset=ConsolePort.objects.all(),
  87. label='Name',
  88. disabled_indicator='_occupied',
  89. query_params={
  90. 'device_id': '$termination_b_device'
  91. }
  92. )
  93. class ConnectCableToConsoleServerPortForm(ConnectCableToDeviceForm):
  94. termination_b_id = DynamicModelChoiceField(
  95. queryset=ConsoleServerPort.objects.all(),
  96. label='Name',
  97. disabled_indicator='_occupied',
  98. query_params={
  99. 'device_id': '$termination_b_device'
  100. }
  101. )
  102. class ConnectCableToPowerPortForm(ConnectCableToDeviceForm):
  103. termination_b_id = DynamicModelChoiceField(
  104. queryset=PowerPort.objects.all(),
  105. label='Name',
  106. disabled_indicator='_occupied',
  107. query_params={
  108. 'device_id': '$termination_b_device'
  109. }
  110. )
  111. class ConnectCableToPowerOutletForm(ConnectCableToDeviceForm):
  112. termination_b_id = DynamicModelChoiceField(
  113. queryset=PowerOutlet.objects.all(),
  114. label='Name',
  115. disabled_indicator='_occupied',
  116. query_params={
  117. 'device_id': '$termination_b_device'
  118. }
  119. )
  120. class ConnectCableToInterfaceForm(ConnectCableToDeviceForm):
  121. termination_b_id = DynamicModelChoiceField(
  122. queryset=Interface.objects.all(),
  123. label='Name',
  124. disabled_indicator='_occupied',
  125. query_params={
  126. 'device_id': '$termination_b_device',
  127. 'kind': 'physical',
  128. }
  129. )
  130. class ConnectCableToFrontPortForm(ConnectCableToDeviceForm):
  131. termination_b_id = DynamicModelChoiceField(
  132. queryset=FrontPort.objects.all(),
  133. label='Name',
  134. disabled_indicator='_occupied',
  135. query_params={
  136. 'device_id': '$termination_b_device'
  137. }
  138. )
  139. class ConnectCableToRearPortForm(ConnectCableToDeviceForm):
  140. termination_b_id = DynamicModelChoiceField(
  141. queryset=RearPort.objects.all(),
  142. label='Name',
  143. disabled_indicator='_occupied',
  144. query_params={
  145. 'device_id': '$termination_b_device'
  146. }
  147. )
  148. class ConnectCableToCircuitTerminationForm(TenancyForm, NetBoxModelForm):
  149. termination_b_provider = DynamicModelChoiceField(
  150. queryset=Provider.objects.all(),
  151. label='Provider',
  152. required=False
  153. )
  154. termination_b_region = DynamicModelChoiceField(
  155. queryset=Region.objects.all(),
  156. label='Region',
  157. required=False
  158. )
  159. termination_b_sitegroup = DynamicModelChoiceField(
  160. queryset=SiteGroup.objects.all(),
  161. label='Site group',
  162. required=False
  163. )
  164. termination_b_site = DynamicModelChoiceField(
  165. queryset=Site.objects.all(),
  166. label='Site',
  167. required=False,
  168. query_params={
  169. 'region_id': '$termination_b_region',
  170. 'group_id': '$termination_b_sitegroup',
  171. }
  172. )
  173. termination_b_circuit = DynamicModelChoiceField(
  174. queryset=Circuit.objects.all(),
  175. label='Circuit',
  176. query_params={
  177. 'provider_id': '$termination_b_provider',
  178. 'site_id': '$termination_b_site',
  179. }
  180. )
  181. termination_b_id = DynamicModelChoiceField(
  182. queryset=CircuitTermination.objects.all(),
  183. label='Side',
  184. disabled_indicator='_occupied',
  185. query_params={
  186. 'circuit_id': '$termination_b_circuit'
  187. }
  188. )
  189. class Meta(ConnectCableToDeviceForm.Meta):
  190. fields = [
  191. 'termination_b_provider', 'termination_b_region', 'termination_b_sitegroup', 'termination_b_site',
  192. 'termination_b_circuit', 'termination_b_id', 'type', 'status', 'tenant_group', 'tenant', 'label', 'color',
  193. 'length', 'length_unit', 'tags',
  194. ]
  195. def clean_termination_b_id(self):
  196. # Return the PK rather than the object
  197. return getattr(self.cleaned_data['termination_b_id'], 'pk', None)
  198. class ConnectCableToPowerFeedForm(TenancyForm, NetBoxModelForm):
  199. termination_b_region = DynamicModelChoiceField(
  200. queryset=Region.objects.all(),
  201. label='Region',
  202. required=False
  203. )
  204. termination_b_sitegroup = DynamicModelChoiceField(
  205. queryset=SiteGroup.objects.all(),
  206. label='Site group',
  207. required=False
  208. )
  209. termination_b_site = DynamicModelChoiceField(
  210. queryset=Site.objects.all(),
  211. label='Site',
  212. required=False,
  213. query_params={
  214. 'region_id': '$termination_b_region',
  215. 'group_id': '$termination_b_sitegroup',
  216. }
  217. )
  218. termination_b_location = DynamicModelChoiceField(
  219. queryset=Location.objects.all(),
  220. label='Location',
  221. required=False,
  222. query_params={
  223. 'site_id': '$termination_b_site'
  224. }
  225. )
  226. termination_b_powerpanel = DynamicModelChoiceField(
  227. queryset=PowerPanel.objects.all(),
  228. label='Power Panel',
  229. required=False,
  230. query_params={
  231. 'site_id': '$termination_b_site',
  232. 'location_id': '$termination_b_location',
  233. }
  234. )
  235. termination_b_id = DynamicModelChoiceField(
  236. queryset=PowerFeed.objects.all(),
  237. label='Name',
  238. disabled_indicator='_occupied',
  239. query_params={
  240. 'power_panel_id': '$termination_b_powerpanel'
  241. }
  242. )
  243. class Meta(ConnectCableToDeviceForm.Meta):
  244. fields = [
  245. 'termination_b_region', 'termination_b_sitegroup', 'termination_b_site', 'termination_b_location',
  246. 'termination_b_powerpanel', 'termination_b_id', 'type', 'status', 'tenant_group', 'tenant', 'label',
  247. 'color', 'length', 'length_unit', 'tags',
  248. ]
  249. def clean_termination_b_id(self):
  250. # Return the PK rather than the object
  251. return getattr(self.cleaned_data['termination_b_id'], 'pk', None)