bulk_edit.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461
  1. from django import forms
  2. from dcim.models import Region, Site, SiteGroup
  3. from extras.forms import AddRemoveTagsForm, CustomFieldModelBulkEditForm
  4. from ipam.choices import *
  5. from ipam.constants import *
  6. from ipam.models import *
  7. from ipam.models import ASN
  8. from tenancy.models import Tenant
  9. from utilities.forms import (
  10. add_blank_choice, BulkEditNullBooleanSelect, DatePicker, DynamicModelChoiceField, NumericArrayField, StaticSelect,
  11. DynamicModelMultipleChoiceField,
  12. )
  13. __all__ = (
  14. 'AggregateBulkEditForm',
  15. 'ASNBulkEditForm',
  16. 'FHRPGroupBulkEditForm',
  17. 'IPAddressBulkEditForm',
  18. 'IPRangeBulkEditForm',
  19. 'PrefixBulkEditForm',
  20. 'RIRBulkEditForm',
  21. 'RoleBulkEditForm',
  22. 'RouteTargetBulkEditForm',
  23. 'ServiceBulkEditForm',
  24. 'VLANBulkEditForm',
  25. 'VLANGroupBulkEditForm',
  26. 'VRFBulkEditForm',
  27. )
  28. class VRFBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  29. pk = forms.ModelMultipleChoiceField(
  30. queryset=VRF.objects.all(),
  31. widget=forms.MultipleHiddenInput()
  32. )
  33. tenant = DynamicModelChoiceField(
  34. queryset=Tenant.objects.all(),
  35. required=False
  36. )
  37. enforce_unique = forms.NullBooleanField(
  38. required=False,
  39. widget=BulkEditNullBooleanSelect(),
  40. label='Enforce unique space'
  41. )
  42. description = forms.CharField(
  43. max_length=100,
  44. required=False
  45. )
  46. class Meta:
  47. nullable_fields = [
  48. 'tenant', 'description',
  49. ]
  50. class RouteTargetBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  51. pk = forms.ModelMultipleChoiceField(
  52. queryset=RouteTarget.objects.all(),
  53. widget=forms.MultipleHiddenInput()
  54. )
  55. tenant = DynamicModelChoiceField(
  56. queryset=Tenant.objects.all(),
  57. required=False
  58. )
  59. description = forms.CharField(
  60. max_length=200,
  61. required=False
  62. )
  63. class Meta:
  64. nullable_fields = [
  65. 'tenant', 'description',
  66. ]
  67. class RIRBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  68. pk = forms.ModelMultipleChoiceField(
  69. queryset=RIR.objects.all(),
  70. widget=forms.MultipleHiddenInput
  71. )
  72. is_private = forms.NullBooleanField(
  73. required=False,
  74. widget=BulkEditNullBooleanSelect
  75. )
  76. description = forms.CharField(
  77. max_length=200,
  78. required=False
  79. )
  80. class Meta:
  81. nullable_fields = ['is_private', 'description']
  82. class ASNBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  83. pk = forms.ModelMultipleChoiceField(
  84. queryset=ASN.objects.all(),
  85. widget=forms.MultipleHiddenInput()
  86. )
  87. sites = DynamicModelMultipleChoiceField(
  88. queryset=Site.objects.all(),
  89. required=False
  90. )
  91. rir = DynamicModelChoiceField(
  92. queryset=RIR.objects.all(),
  93. required=False,
  94. label='RIR'
  95. )
  96. tenant = DynamicModelChoiceField(
  97. queryset=Tenant.objects.all(),
  98. required=False
  99. )
  100. description = forms.CharField(
  101. max_length=100,
  102. required=False
  103. )
  104. class Meta:
  105. nullable_fields = [
  106. 'date_added', 'description',
  107. ]
  108. widgets = {
  109. 'date_added': DatePicker(),
  110. }
  111. class AggregateBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  112. pk = forms.ModelMultipleChoiceField(
  113. queryset=Aggregate.objects.all(),
  114. widget=forms.MultipleHiddenInput()
  115. )
  116. rir = DynamicModelChoiceField(
  117. queryset=RIR.objects.all(),
  118. required=False,
  119. label='RIR'
  120. )
  121. tenant = DynamicModelChoiceField(
  122. queryset=Tenant.objects.all(),
  123. required=False
  124. )
  125. date_added = forms.DateField(
  126. required=False
  127. )
  128. description = forms.CharField(
  129. max_length=100,
  130. required=False
  131. )
  132. class Meta:
  133. nullable_fields = [
  134. 'date_added', 'description',
  135. ]
  136. widgets = {
  137. 'date_added': DatePicker(),
  138. }
  139. class RoleBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  140. pk = forms.ModelMultipleChoiceField(
  141. queryset=Role.objects.all(),
  142. widget=forms.MultipleHiddenInput
  143. )
  144. weight = forms.IntegerField(
  145. required=False
  146. )
  147. description = forms.CharField(
  148. max_length=200,
  149. required=False
  150. )
  151. class Meta:
  152. nullable_fields = ['description']
  153. class PrefixBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  154. pk = forms.ModelMultipleChoiceField(
  155. queryset=Prefix.objects.all(),
  156. widget=forms.MultipleHiddenInput()
  157. )
  158. region = DynamicModelChoiceField(
  159. queryset=Region.objects.all(),
  160. required=False
  161. )
  162. site_group = DynamicModelChoiceField(
  163. queryset=SiteGroup.objects.all(),
  164. required=False
  165. )
  166. site = DynamicModelChoiceField(
  167. queryset=Site.objects.all(),
  168. required=False,
  169. query_params={
  170. 'region_id': '$region',
  171. 'group_id': '$site_group',
  172. }
  173. )
  174. vrf = DynamicModelChoiceField(
  175. queryset=VRF.objects.all(),
  176. required=False,
  177. label='VRF'
  178. )
  179. prefix_length = forms.IntegerField(
  180. min_value=PREFIX_LENGTH_MIN,
  181. max_value=PREFIX_LENGTH_MAX,
  182. required=False
  183. )
  184. tenant = DynamicModelChoiceField(
  185. queryset=Tenant.objects.all(),
  186. required=False
  187. )
  188. status = forms.ChoiceField(
  189. choices=add_blank_choice(PrefixStatusChoices),
  190. required=False,
  191. widget=StaticSelect()
  192. )
  193. role = DynamicModelChoiceField(
  194. queryset=Role.objects.all(),
  195. required=False
  196. )
  197. is_pool = forms.NullBooleanField(
  198. required=False,
  199. widget=BulkEditNullBooleanSelect(),
  200. label='Is a pool'
  201. )
  202. mark_utilized = forms.NullBooleanField(
  203. required=False,
  204. widget=BulkEditNullBooleanSelect(),
  205. label='Treat as 100% utilized'
  206. )
  207. description = forms.CharField(
  208. max_length=100,
  209. required=False
  210. )
  211. class Meta:
  212. nullable_fields = [
  213. 'site', 'vrf', 'tenant', 'role', 'description',
  214. ]
  215. class IPRangeBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  216. pk = forms.ModelMultipleChoiceField(
  217. queryset=IPRange.objects.all(),
  218. widget=forms.MultipleHiddenInput()
  219. )
  220. vrf = DynamicModelChoiceField(
  221. queryset=VRF.objects.all(),
  222. required=False,
  223. label='VRF'
  224. )
  225. tenant = DynamicModelChoiceField(
  226. queryset=Tenant.objects.all(),
  227. required=False
  228. )
  229. status = forms.ChoiceField(
  230. choices=add_blank_choice(IPRangeStatusChoices),
  231. required=False,
  232. widget=StaticSelect()
  233. )
  234. role = DynamicModelChoiceField(
  235. queryset=Role.objects.all(),
  236. required=False
  237. )
  238. description = forms.CharField(
  239. max_length=100,
  240. required=False
  241. )
  242. class Meta:
  243. nullable_fields = [
  244. 'vrf', 'tenant', 'role', 'description',
  245. ]
  246. class IPAddressBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  247. pk = forms.ModelMultipleChoiceField(
  248. queryset=IPAddress.objects.all(),
  249. widget=forms.MultipleHiddenInput()
  250. )
  251. vrf = DynamicModelChoiceField(
  252. queryset=VRF.objects.all(),
  253. required=False,
  254. label='VRF'
  255. )
  256. mask_length = forms.IntegerField(
  257. min_value=IPADDRESS_MASK_LENGTH_MIN,
  258. max_value=IPADDRESS_MASK_LENGTH_MAX,
  259. required=False
  260. )
  261. tenant = DynamicModelChoiceField(
  262. queryset=Tenant.objects.all(),
  263. required=False
  264. )
  265. status = forms.ChoiceField(
  266. choices=add_blank_choice(IPAddressStatusChoices),
  267. required=False,
  268. widget=StaticSelect()
  269. )
  270. role = forms.ChoiceField(
  271. choices=add_blank_choice(IPAddressRoleChoices),
  272. required=False,
  273. widget=StaticSelect()
  274. )
  275. dns_name = forms.CharField(
  276. max_length=255,
  277. required=False,
  278. label='DNS name'
  279. )
  280. description = forms.CharField(
  281. max_length=100,
  282. required=False
  283. )
  284. class Meta:
  285. nullable_fields = [
  286. 'vrf', 'role', 'tenant', 'dns_name', 'description',
  287. ]
  288. class FHRPGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  289. pk = forms.ModelMultipleChoiceField(
  290. queryset=FHRPGroup.objects.all(),
  291. widget=forms.MultipleHiddenInput()
  292. )
  293. protocol = forms.ChoiceField(
  294. choices=add_blank_choice(FHRPGroupProtocolChoices),
  295. required=False,
  296. widget=StaticSelect()
  297. )
  298. group_id = forms.IntegerField(
  299. min_value=0,
  300. required=False,
  301. label='Group ID'
  302. )
  303. auth_type = forms.ChoiceField(
  304. choices=add_blank_choice(FHRPGroupAuthTypeChoices),
  305. required=False,
  306. widget=StaticSelect(),
  307. label='Authentication type'
  308. )
  309. auth_key = forms.CharField(
  310. max_length=255,
  311. required=False,
  312. label='Authentication key'
  313. )
  314. description = forms.CharField(
  315. max_length=200,
  316. required=False
  317. )
  318. class Meta:
  319. nullable_fields = ['auth_type', 'auth_key', 'description']
  320. class VLANGroupBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  321. pk = forms.ModelMultipleChoiceField(
  322. queryset=VLANGroup.objects.all(),
  323. widget=forms.MultipleHiddenInput
  324. )
  325. site = DynamicModelChoiceField(
  326. queryset=Site.objects.all(),
  327. required=False
  328. )
  329. min_vid = forms.IntegerField(
  330. min_value=VLAN_VID_MIN,
  331. max_value=VLAN_VID_MAX,
  332. required=False,
  333. label='Minimum child VLAN VID'
  334. )
  335. max_vid = forms.IntegerField(
  336. min_value=VLAN_VID_MIN,
  337. max_value=VLAN_VID_MAX,
  338. required=False,
  339. label='Maximum child VLAN VID'
  340. )
  341. description = forms.CharField(
  342. max_length=200,
  343. required=False
  344. )
  345. class Meta:
  346. nullable_fields = ['site', 'description']
  347. class VLANBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  348. pk = forms.ModelMultipleChoiceField(
  349. queryset=VLAN.objects.all(),
  350. widget=forms.MultipleHiddenInput()
  351. )
  352. region = DynamicModelChoiceField(
  353. queryset=Region.objects.all(),
  354. required=False
  355. )
  356. site_group = DynamicModelChoiceField(
  357. queryset=SiteGroup.objects.all(),
  358. required=False
  359. )
  360. site = DynamicModelChoiceField(
  361. queryset=Site.objects.all(),
  362. required=False,
  363. query_params={
  364. 'region_id': '$region',
  365. 'group_id': '$site_group',
  366. }
  367. )
  368. group = DynamicModelChoiceField(
  369. queryset=VLANGroup.objects.all(),
  370. required=False,
  371. query_params={
  372. 'site_id': '$site'
  373. }
  374. )
  375. tenant = DynamicModelChoiceField(
  376. queryset=Tenant.objects.all(),
  377. required=False
  378. )
  379. status = forms.ChoiceField(
  380. choices=add_blank_choice(VLANStatusChoices),
  381. required=False,
  382. widget=StaticSelect()
  383. )
  384. role = DynamicModelChoiceField(
  385. queryset=Role.objects.all(),
  386. required=False
  387. )
  388. description = forms.CharField(
  389. max_length=100,
  390. required=False
  391. )
  392. class Meta:
  393. nullable_fields = [
  394. 'site', 'group', 'tenant', 'role', 'description',
  395. ]
  396. class ServiceBulkEditForm(AddRemoveTagsForm, CustomFieldModelBulkEditForm):
  397. pk = forms.ModelMultipleChoiceField(
  398. queryset=Service.objects.all(),
  399. widget=forms.MultipleHiddenInput()
  400. )
  401. protocol = forms.ChoiceField(
  402. choices=add_blank_choice(ServiceProtocolChoices),
  403. required=False,
  404. widget=StaticSelect()
  405. )
  406. ports = NumericArrayField(
  407. base_field=forms.IntegerField(
  408. min_value=SERVICE_PORT_MIN,
  409. max_value=SERVICE_PORT_MAX
  410. ),
  411. required=False
  412. )
  413. description = forms.CharField(
  414. max_length=100,
  415. required=False
  416. )
  417. class Meta:
  418. nullable_fields = [
  419. 'description',
  420. ]