tables.py 4.3 KB

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