import django_tables2 as tables from django_tables2.utils import Accessor from dcim.tables import BaseInterfaceTable from tenancy.tables import COL_TENANT from utilities.tables import BaseTable, ButtonsColumn, ColoredLabelColumn, TagColumn, ToggleColumn from .models import Cluster, ClusterGroup, ClusterType, VirtualMachine, VMInterface VIRTUALMACHINE_STATUS = """ {{ record.get_status_display }} """ VIRTUALMACHINE_PRIMARY_IP = """ {{ record.primary_ip6.address.ip|default:"" }} {% if record.primary_ip6 and record.primary_ip4 %}
{% endif %} {{ record.primary_ip4.address.ip|default:"" }} """ DEVICE_COUNT = """ {{ value|default:0 }} """ VM_COUNT = """ {{ value|default:0 }} """ # # Cluster types # class ClusterTypeTable(BaseTable): pk = ToggleColumn() name = tables.LinkColumn() cluster_count = tables.Column( verbose_name='Clusters' ) actions = ButtonsColumn(ClusterType, pk_field='slug') class Meta(BaseTable.Meta): model = ClusterType fields = ('pk', 'name', 'slug', 'cluster_count', 'description', 'actions') default_columns = ('pk', 'name', 'cluster_count', 'description', 'actions') # # Cluster groups # class ClusterGroupTable(BaseTable): pk = ToggleColumn() name = tables.LinkColumn() cluster_count = tables.Column( verbose_name='Clusters' ) actions = ButtonsColumn(ClusterGroup, pk_field='slug') class Meta(BaseTable.Meta): model = ClusterGroup fields = ('pk', 'name', 'slug', 'cluster_count', 'description', 'actions') default_columns = ('pk', 'name', 'cluster_count', 'description', 'actions') # # Clusters # class ClusterTable(BaseTable): pk = ToggleColumn() name = tables.LinkColumn() tenant = tables.Column( linkify=True ) site = tables.Column( linkify=True ) device_count = tables.TemplateColumn( template_code=DEVICE_COUNT, verbose_name='Devices' ) vm_count = tables.TemplateColumn( template_code=VM_COUNT, verbose_name='VMs' ) tags = TagColumn( url_name='virtualization:cluster_list' ) class Meta(BaseTable.Meta): model = Cluster fields = ('pk', 'name', 'type', 'group', 'tenant', 'site', 'device_count', 'vm_count', 'tags') default_columns = ('pk', 'name', 'type', 'group', 'tenant', 'site', 'device_count', 'vm_count') # # Virtual machines # class VirtualMachineTable(BaseTable): pk = ToggleColumn() name = tables.LinkColumn() status = tables.TemplateColumn( template_code=VIRTUALMACHINE_STATUS ) cluster = tables.Column( linkify=True ) role = ColoredLabelColumn() tenant = tables.TemplateColumn( template_code=COL_TENANT ) class Meta(BaseTable.Meta): model = VirtualMachine fields = ('pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk') class VirtualMachineDetailTable(VirtualMachineTable): primary_ip4 = tables.Column( linkify=True, verbose_name='IPv4 Address' ) primary_ip6 = tables.Column( linkify=True, verbose_name='IPv6 Address' ) primary_ip = tables.TemplateColumn( orderable=False, verbose_name='IP Address', template_code=VIRTUALMACHINE_PRIMARY_IP ) tags = TagColumn( url_name='virtualization:virtualmachine_list' ) class Meta(BaseTable.Meta): model = VirtualMachine fields = ( 'pk', 'name', 'status', 'cluster', 'role', 'tenant', 'platform', 'vcpus', 'memory', 'disk', 'primary_ip4', 'primary_ip6', 'primary_ip', 'tags', ) default_columns = ( 'pk', 'name', 'status', 'cluster', 'role', 'tenant', 'vcpus', 'memory', 'disk', 'primary_ip', ) # # VM components # class VMInterfaceTable(BaseInterfaceTable): pk = ToggleColumn() virtual_machine = tables.LinkColumn() name = tables.Column( linkify=True ) class Meta(BaseTable.Meta): model = VMInterface fields = ( 'pk', 'virtual_machine', 'name', 'enabled', 'mac_address', 'mtu', 'description', 'ip_addresses', 'untagged_vlan', 'tagged_vlans', ) default_columns = ('pk', 'virtual_machine', 'name', 'enabled', 'description')