tables.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from __future__ import unicode_literals
  2. import django_tables2 as tables
  3. from django_tables2.utils import Accessor
  4. from dcim.models import Interface
  5. from utilities.tables import BaseTable, ToggleColumn
  6. from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine
  7. CLUSTERTYPE_ACTIONS = """
  8. {% if perms.virtualization.change_clustertype %}
  9. <a href="{% url 'virtualization:clustertype_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
  10. {% endif %}
  11. """
  12. CLUSTERGROUP_ACTIONS = """
  13. {% if perms.virtualization.change_clustergroup %}
  14. <a href="{% url 'virtualization:clustergroup_edit' slug=record.slug %}" class="btn btn-xs btn-warning"><i class="glyphicon glyphicon-pencil" aria-hidden="true"></i></a>
  15. {% endif %}
  16. """
  17. VIRTUALMACHINE_STATUS = """
  18. <span class="label label-{{ record.get_status_class }}">{{ record.get_status_display }}</span>
  19. """
  20. VIRTUALMACHINE_ROLE = """
  21. <label class="label" style="background-color: #{{ record.role.color }}">{{ value }}</label>
  22. """
  23. VIRTUALMACHINE_PRIMARY_IP = """
  24. {{ record.primary_ip6.address.ip|default:"" }}
  25. {% if record.primary_ip6 and record.primary_ip4 %}<br />{% endif %}
  26. {{ record.primary_ip4.address.ip|default:"" }}
  27. """
  28. #
  29. # Cluster types
  30. #
  31. class ClusterTypeTable(BaseTable):
  32. pk = ToggleColumn()
  33. name = tables.LinkColumn()
  34. cluster_count = tables.Column(verbose_name='Clusters')
  35. actions = tables.TemplateColumn(
  36. template_code=CLUSTERTYPE_ACTIONS,
  37. attrs={'td': {'class': 'text-right'}},
  38. verbose_name=''
  39. )
  40. class Meta(BaseTable.Meta):
  41. model = ClusterType
  42. fields = ('pk', 'name', 'cluster_count', 'actions')
  43. #
  44. # Cluster groups
  45. #
  46. class ClusterGroupTable(BaseTable):
  47. pk = ToggleColumn()
  48. name = tables.LinkColumn()
  49. cluster_count = tables.Column(verbose_name='Clusters')
  50. actions = tables.TemplateColumn(
  51. template_code=CLUSTERGROUP_ACTIONS,
  52. attrs={'td': {'class': 'text-right'}},
  53. verbose_name=''
  54. )
  55. class Meta(BaseTable.Meta):
  56. model = ClusterGroup
  57. fields = ('pk', 'name', 'cluster_count', 'actions')
  58. #
  59. # Clusters
  60. #
  61. class ClusterTable(BaseTable):
  62. pk = ToggleColumn()
  63. name = tables.LinkColumn()
  64. device_count = tables.Column(verbose_name='Devices')
  65. vm_count = tables.Column(verbose_name='VMs')
  66. class Meta(BaseTable.Meta):
  67. model = Cluster
  68. fields = ('pk', 'name', 'type', 'group', 'site', 'device_count', 'vm_count')
  69. #
  70. # Virtual machines
  71. #
  72. class VirtualMachineTable(BaseTable):
  73. pk = ToggleColumn()
  74. name = tables.LinkColumn()
  75. status = tables.TemplateColumn(template_code=VIRTUALMACHINE_STATUS)
  76. cluster = tables.LinkColumn('virtualization:cluster', args=[Accessor('cluster.pk')])
  77. role = tables.TemplateColumn(VIRTUALMACHINE_ROLE)
  78. tenant = tables.LinkColumn('tenancy:tenant', args=[Accessor('tenant.slug')])
  79. class Meta(BaseTable.Meta):
  80. model = VirtualMachine
  81. fields = ('pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk')
  82. class VirtualMachineDetailTable(VirtualMachineTable):
  83. primary_ip = tables.TemplateColumn(
  84. orderable=False, verbose_name='IP Address', template_code=VIRTUALMACHINE_PRIMARY_IP
  85. )
  86. class Meta(BaseTable.Meta):
  87. model = VirtualMachine
  88. fields = ('pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip')
  89. #
  90. # VM components
  91. #
  92. class InterfaceTable(BaseTable):
  93. class Meta(BaseTable.Meta):
  94. model = Interface
  95. fields = ('name', 'enabled', 'description')