racks.py 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import django_tables2 as tables
  2. from django_tables2.utils import Accessor
  3. from dcim.models import Rack, RackReservation, RackRole
  4. from netbox.tables import NetBoxTable, columns
  5. from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
  6. from .template_code import WEIGHT
  7. __all__ = (
  8. 'RackTable',
  9. 'RackReservationTable',
  10. 'RackRoleTable',
  11. )
  12. #
  13. # Rack roles
  14. #
  15. class RackRoleTable(NetBoxTable):
  16. name = tables.Column(linkify=True)
  17. rack_count = tables.Column(verbose_name='Racks')
  18. color = columns.ColorColumn()
  19. tags = columns.TagColumn(
  20. url_name='dcim:rackrole_list'
  21. )
  22. class Meta(NetBoxTable.Meta):
  23. model = RackRole
  24. fields = (
  25. 'pk', 'id', 'name', 'rack_count', 'color', 'description', 'slug', 'tags', 'actions', 'created',
  26. 'last_updated',
  27. )
  28. default_columns = ('pk', 'name', 'rack_count', 'color', 'description')
  29. #
  30. # Racks
  31. #
  32. class RackTable(TenancyColumnsMixin, ContactsColumnMixin, NetBoxTable):
  33. name = tables.Column(
  34. order_by=('_name',),
  35. linkify=True
  36. )
  37. location = tables.Column(
  38. linkify=True
  39. )
  40. site = tables.Column(
  41. linkify=True
  42. )
  43. status = columns.ChoiceFieldColumn()
  44. role = columns.ColoredLabelColumn()
  45. u_height = tables.TemplateColumn(
  46. template_code="{{ value }}U",
  47. verbose_name='Height'
  48. )
  49. comments = columns.MarkdownColumn()
  50. device_count = columns.LinkedCountColumn(
  51. viewname='dcim:device_list',
  52. url_params={'rack_id': 'pk'},
  53. verbose_name='Devices'
  54. )
  55. get_utilization = columns.UtilizationColumn(
  56. orderable=False,
  57. verbose_name='Space'
  58. )
  59. get_power_utilization = columns.UtilizationColumn(
  60. orderable=False,
  61. verbose_name='Power'
  62. )
  63. tags = columns.TagColumn(
  64. url_name='dcim:rack_list'
  65. )
  66. outer_width = tables.TemplateColumn(
  67. template_code="{{ record.outer_width }} {{ record.outer_unit }}",
  68. verbose_name='Outer Width'
  69. )
  70. outer_depth = tables.TemplateColumn(
  71. template_code="{{ record.outer_depth }} {{ record.outer_unit }}",
  72. verbose_name='Outer Depth'
  73. )
  74. weight = columns.TemplateColumn(
  75. template_code=WEIGHT,
  76. order_by=('_abs_weight', 'weight_unit')
  77. )
  78. max_weight = columns.TemplateColumn(
  79. template_code=WEIGHT,
  80. order_by=('_abs_max_weight', 'weight_unit')
  81. )
  82. class Meta(NetBoxTable.Meta):
  83. model = Rack
  84. fields = (
  85. 'pk', 'id', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'tenant_group', 'role', 'serial',
  86. 'asset_tag', 'type', 'u_height', 'width', 'outer_width', 'outer_depth', 'mounting_depth', 'weight',
  87. 'max_weight', 'comments', 'device_count', 'get_utilization', 'get_power_utilization', 'description',
  88. 'contacts', 'tags', 'created', 'last_updated',
  89. )
  90. default_columns = (
  91. 'pk', 'name', 'site', 'location', 'status', 'facility_id', 'tenant', 'role', 'u_height', 'device_count',
  92. 'get_utilization',
  93. )
  94. #
  95. # Rack reservations
  96. #
  97. class RackReservationTable(TenancyColumnsMixin, NetBoxTable):
  98. reservation = tables.Column(
  99. accessor='pk',
  100. linkify=True
  101. )
  102. site = tables.Column(
  103. accessor=Accessor('rack__site'),
  104. linkify=True
  105. )
  106. location = tables.Column(
  107. accessor=Accessor('rack__location'),
  108. linkify=True
  109. )
  110. rack = tables.Column(
  111. linkify=True
  112. )
  113. unit_list = tables.Column(
  114. orderable=False,
  115. verbose_name='Units'
  116. )
  117. comments = columns.MarkdownColumn()
  118. tags = columns.TagColumn(
  119. url_name='dcim:rackreservation_list'
  120. )
  121. class Meta(NetBoxTable.Meta):
  122. model = RackReservation
  123. fields = (
  124. 'pk', 'id', 'reservation', 'site', 'location', 'rack', 'unit_list', 'user', 'created', 'tenant',
  125. 'tenant_group', 'description', 'comments', 'tags', 'actions', 'created', 'last_updated',
  126. )
  127. default_columns = ('pk', 'reservation', 'site', 'rack', 'unit_list', 'user', 'description')