tables.py 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. import django_tables2 as tables
  2. from django_tables2.utils import Accessor
  3. from dcim.tables import BaseInterfaceTable
  4. from tenancy.tables import COL_TENANT
  5. from utilities.tables import BaseTable, ButtonsColumn, ColoredLabelColumn, TagColumn, ToggleColumn
  6. from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface
  7. VIRTUALMACHINE_STATUS = """
  8. <span class="label label-{{ record.get_status_class }}">{{ record.get_status_display }}</span>
  9. """
  10. VIRTUALMACHINE_PRIMARY_IP = """
  11. {{ record.primary_ip6.address.ip|default:"" }}
  12. {% if record.primary_ip6 and record.primary_ip4 %}<br />{% endif %}
  13. {{ record.primary_ip4.address.ip|default:"" }}
  14. """
  15. DEVICE_COUNT = """
  16. <a href="{% url 'dcim:device_list' %}?cluster_id={{ record.pk }}">{{ value|default:0 }}</a>
  17. """
  18. VM_COUNT = """
  19. <a href="{% url 'virtualization:virtualmachine_list' %}?cluster_id={{ record.pk }}">{{ value|default:0 }}</a>
  20. """
  21. #
  22. # Cluster types
  23. #
  24. class ClusterTypeTable(BaseTable):
  25. pk = ToggleColumn()
  26. name = tables.LinkColumn()
  27. cluster_count = tables.Column(
  28. verbose_name='Clusters'
  29. )
  30. actions = ButtonsColumn(ClusterType, pk_field='slug')
  31. class Meta(BaseTable.Meta):
  32. model = ClusterType
  33. fields = ('pk', 'name', 'slug', 'cluster_count', 'description', 'actions')
  34. default_columns = ('pk', 'name', 'cluster_count', 'description', 'actions')
  35. #
  36. # Cluster groups
  37. #
  38. class ClusterGroupTable(BaseTable):
  39. pk = ToggleColumn()
  40. name = tables.LinkColumn()
  41. cluster_count = tables.Column(
  42. verbose_name='Clusters'
  43. )
  44. actions = ButtonsColumn(ClusterGroup, pk_field='slug')
  45. class Meta(BaseTable.Meta):
  46. model = ClusterGroup
  47. fields = ('pk', 'name', 'slug', 'cluster_count', 'description', 'actions')
  48. default_columns = ('pk', 'name', 'cluster_count', 'description', 'actions')
  49. #
  50. # Clusters
  51. #
  52. class ClusterTable(BaseTable):
  53. pk = ToggleColumn()
  54. name = tables.LinkColumn()
  55. tenant = tables.Column(
  56. linkify=True
  57. )
  58. site = tables.Column(
  59. linkify=True
  60. )
  61. device_count = tables.TemplateColumn(
  62. template_code=DEVICE_COUNT,
  63. verbose_name='Devices'
  64. )
  65. vm_count = tables.TemplateColumn(
  66. template_code=VM_COUNT,
  67. verbose_name='VMs'
  68. )
  69. tags = TagColumn(
  70. url_name='virtualization:cluster_list'
  71. )
  72. class Meta(BaseTable.Meta):
  73. model = Cluster
  74. fields = ('pk', 'name', 'type', 'group', 'tenant', 'site', 'device_count', 'vm_count', 'tags')
  75. default_columns = ('pk', 'name', 'type', 'group', 'tenant', 'site', 'device_count', 'vm_count')
  76. #
  77. # Virtual machines
  78. #
  79. class VirtualMachineTable(BaseTable):
  80. pk = ToggleColumn()
  81. name = tables.LinkColumn()
  82. status = tables.TemplateColumn(
  83. template_code=VIRTUALMACHINE_STATUS
  84. )
  85. cluster = tables.Column(
  86. linkify=True
  87. )
  88. role = ColoredLabelColumn()
  89. tenant = tables.TemplateColumn(
  90. template_code=COL_TENANT
  91. )
  92. class Meta(BaseTable.Meta):
  93. model = VirtualMachine
  94. fields = ('pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk')
  95. class VirtualMachineDetailTable(VirtualMachineTable):
  96. primary_ip4 = tables.Column(
  97. linkify=True,
  98. verbose_name='IPv4 Address'
  99. )
  100. primary_ip6 = tables.Column(
  101. linkify=True,
  102. verbose_name='IPv6 Address'
  103. )
  104. primary_ip = tables.TemplateColumn(
  105. orderable=False,
  106. verbose_name='IP Address',
  107. template_code=VIRTUALMACHINE_PRIMARY_IP
  108. )
  109. tags = TagColumn(
  110. url_name='virtualization:virtualmachine_list'
  111. )
  112. class Meta(BaseTable.Meta):
  113. model = VirtualMachine
  114. fields = (
  115. 'pk', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'vcpus', 'memory', 'disk', 'primary_ip4',
  116. 'primary_ip6', 'primary_ip', 'tags',
  117. )
  118. default_columns = (
  119. 'pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip',
  120. )
  121. #
  122. # VM components
  123. #
  124. class VMInterfaceTable(BaseInterfaceTable):
  125. pk = ToggleColumn()
  126. virtual_machine = tables.LinkColumn()
  127. name = tables.Column(
  128. linkify=True
  129. )
  130. tags = TagColumn(
  131. url_name='virtualization:vminterface_list'
  132. )
  133. class Meta(BaseTable.Meta):
  134. model = VMInterface
  135. fields = (
  136. 'pk', 'virtual_machine', 'name', 'enabled', 'mac_address', 'mtu', 'description', 'tags', 'ip_addresses',
  137. 'untagged_vlan', 'tagged_vlans',
  138. )
  139. default_columns = ('pk', 'virtual_machine', 'name', 'enabled', 'description')