tables.py 4.2 KB

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