mirror of
https://github.com/netbox-community/netbox.git
synced 2025-07-29 20:06:25 -06:00
Move table template code to template_code.py & ignore E501 errors
This commit is contained in:
parent
3b7d8dd5db
commit
e6698a5514
@ -6,6 +6,7 @@ from django_tables2.utils import Accessor
|
|||||||
from ipam.models import *
|
from ipam.models import *
|
||||||
from netbox.tables import NetBoxTable, columns
|
from netbox.tables import NetBoxTable, columns
|
||||||
from tenancy.tables import TenancyColumnsMixin, TenantColumn
|
from tenancy.tables import TenancyColumnsMixin, TenantColumn
|
||||||
|
from .template_code import *
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'AggregateTable',
|
'AggregateTable',
|
||||||
@ -20,61 +21,6 @@ __all__ = (
|
|||||||
|
|
||||||
AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span>')
|
AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span>')
|
||||||
|
|
||||||
AGGREGATE_COPY_BUTTON = """
|
|
||||||
{% copy_content record.pk prefix="aggregate_" %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
PREFIX_LINK = """
|
|
||||||
{% if record.pk %}
|
|
||||||
<a href="{{ record.get_absolute_url }}" id="prefix_{{ record.pk }}">{{ record.prefix }}</a>
|
|
||||||
{% else %}
|
|
||||||
<a href="{% url 'ipam:prefix_add' %}?prefix={{ record }}{% if object.vrf %}&vrf={{ object.vrf.pk }}{% endif %}{% if object.site %}&site={{ object.site.pk }}{% endif %}{% if object.tenant %}&tenant_group={{ object.tenant.group.pk }}&tenant={{ object.tenant.pk }}{% endif %}">{{ record.prefix }}</a>
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
PREFIX_COPY_BUTTON = """
|
|
||||||
{% copy_content record.pk prefix="prefix_" %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
PREFIX_LINK_WITH_DEPTH = """
|
|
||||||
{% load helpers %}
|
|
||||||
{% if record.depth %}
|
|
||||||
<div class="record-depth">
|
|
||||||
{% for i in record.depth|as_range %}
|
|
||||||
<span>•</span>
|
|
||||||
{% endfor %}
|
|
||||||
</div>
|
|
||||||
{% endif %}
|
|
||||||
""" + PREFIX_LINK
|
|
||||||
|
|
||||||
IPADDRESS_LINK = """
|
|
||||||
{% if record.pk %}
|
|
||||||
<a href="{{ record.get_absolute_url }}" id="ipaddress_{{ record.pk }}">{{ record.address }}</a>
|
|
||||||
{% elif perms.ipam.add_ipaddress %}
|
|
||||||
<a href="{% url 'ipam:ipaddress_add' %}?address={{ record.1 }}{% if object.vrf %}&vrf={{ object.vrf.pk }}{% endif %}{% if object.tenant %}&tenant={{ object.tenant.pk }}{% endif %}&return_url={% url 'ipam:prefix_ipaddresses' pk=object.pk %}" class="btn btn-sm btn-success">{% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available</a>
|
|
||||||
{% else %}
|
|
||||||
{% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
IPADDRESS_COPY_BUTTON = """
|
|
||||||
{% copy_content record.pk prefix="ipaddress_" %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
IPADDRESS_ASSIGN_LINK = """
|
|
||||||
<a href="{% url 'ipam:ipaddress_edit' pk=record.pk %}?{% if request.GET.interface %}interface={{ request.GET.interface }}{% elif request.GET.vminterface %}vminterface={{ request.GET.vminterface }}{% endif %}&return_url={{ request.GET.return_url }}">{{ record }}</a>
|
|
||||||
"""
|
|
||||||
|
|
||||||
VRF_LINK = """
|
|
||||||
{% if value %}
|
|
||||||
<a href="{{ record.vrf.get_absolute_url }}">{{ record.vrf }}</a>
|
|
||||||
{% elif object.vrf %}
|
|
||||||
<a href="{{ object.vrf.get_absolute_url }}">{{ object.vrf }}</a>
|
|
||||||
{% else %}
|
|
||||||
Global
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# RIRs
|
# RIRs
|
||||||
|
88
netbox/ipam/tables/template_code.py
Normal file
88
netbox/ipam/tables/template_code.py
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
AGGREGATE_COPY_BUTTON = """
|
||||||
|
{% copy_content record.pk prefix="aggregate_" %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
PREFIX_LINK = """
|
||||||
|
{% if record.pk %}
|
||||||
|
<a href="{{ record.get_absolute_url }}" id="prefix_{{ record.pk }}">{{ record.prefix }}</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{% url 'ipam:prefix_add' %}?prefix={{ record }}{% if object.vrf %}&vrf={{ object.vrf.pk }}{% endif %}{% if object.site %}&site={{ object.site.pk }}{% endif %}{% if object.tenant %}&tenant_group={{ object.tenant.group.pk }}&tenant={{ object.tenant.pk }}{% endif %}">{{ record.prefix }}</a>
|
||||||
|
{% endif %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
PREFIX_COPY_BUTTON = """
|
||||||
|
{% copy_content record.pk prefix="prefix_" %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
PREFIX_LINK_WITH_DEPTH = """
|
||||||
|
{% load helpers %}
|
||||||
|
{% if record.depth %}
|
||||||
|
<div class="record-depth">
|
||||||
|
{% for i in record.depth|as_range %}
|
||||||
|
<span>•</span>
|
||||||
|
{% endfor %}
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
""" + PREFIX_LINK
|
||||||
|
|
||||||
|
IPADDRESS_LINK = """
|
||||||
|
{% if record.pk %}
|
||||||
|
<a href="{{ record.get_absolute_url }}" id="ipaddress_{{ record.pk }}">{{ record.address }}</a>
|
||||||
|
{% elif perms.ipam.add_ipaddress %}
|
||||||
|
<a href="{% url 'ipam:ipaddress_add' %}?address={{ record.1 }}{% if object.vrf %}&vrf={{ object.vrf.pk }}{% endif %}{% if object.tenant %}&tenant={{ object.tenant.pk }}{% endif %}&return_url={% url 'ipam:prefix_ipaddresses' pk=object.pk %}" class="btn btn-sm btn-success">{% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available</a>
|
||||||
|
{% else %}
|
||||||
|
{% if record.0 <= 65536 %}{{ record.0 }}{% else %}Many{% endif %} IP{{ record.0|pluralize }} available
|
||||||
|
{% endif %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
IPADDRESS_COPY_BUTTON = """
|
||||||
|
{% copy_content record.pk prefix="ipaddress_" %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
IPADDRESS_ASSIGN_LINK = """
|
||||||
|
<a href="{% url 'ipam:ipaddress_edit' pk=record.pk %}?{% if request.GET.interface %}interface={{ request.GET.interface }}{% elif request.GET.vminterface %}vminterface={{ request.GET.vminterface }}{% endif %}&return_url={{ request.GET.return_url }}">{{ record }}</a>
|
||||||
|
"""
|
||||||
|
|
||||||
|
VRF_LINK = """
|
||||||
|
{% if value %}
|
||||||
|
<a href="{{ record.vrf.get_absolute_url }}">{{ record.vrf }}</a>
|
||||||
|
{% elif object.vrf %}
|
||||||
|
<a href="{{ object.vrf.get_absolute_url }}">{{ object.vrf }}</a>
|
||||||
|
{% else %}
|
||||||
|
Global
|
||||||
|
{% endif %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
VLAN_LINK = """
|
||||||
|
{% if record.pk %}
|
||||||
|
<a href="{{ record.get_absolute_url }}">{{ record.vid }}</a>
|
||||||
|
{% elif perms.ipam.add_vlan %}
|
||||||
|
<a href="{% url 'ipam:vlan_add' %}?vid={{ record.vid }}{% if record.vlan_group %}&group={{ record.vlan_group.pk }}{% endif %}" class="btn btn-sm btn-success">{{ record.available }} VLAN{{ record.available|pluralize }} available</a>
|
||||||
|
{% else %}
|
||||||
|
{{ record.available }} VLAN{{ record.available|pluralize }} available
|
||||||
|
{% endif %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
VLAN_PREFIXES = """
|
||||||
|
{% for prefix in value.all %}
|
||||||
|
<a href="{% url 'ipam:prefix' pk=prefix.pk %}">{{ prefix }}</a>{% if not forloop.last %}<br />{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
VLANGROUP_BUTTONS = """
|
||||||
|
{% with next_vid=record.get_next_available_vid %}
|
||||||
|
{% if next_vid and perms.ipam.add_vlan %}
|
||||||
|
<a href="{% url 'ipam:vlan_add' %}?group={{ record.pk }}&vid={{ next_vid }}" title="Add VLAN" class="btn btn-sm btn-success">
|
||||||
|
<i class="mdi mdi-plus-thick" aria-hidden="true"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% endwith %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
VLAN_MEMBER_TAGGED = """
|
||||||
|
{% if record.untagged_vlan_id == object.pk %}
|
||||||
|
<span class="text-danger"><i class="mdi mdi-close-thick"></i></span>
|
||||||
|
{% else %}
|
||||||
|
<span class="text-success"><i class="mdi mdi-check-bold"></i></span>
|
||||||
|
{% endif %}
|
||||||
|
"""
|
@ -8,6 +8,7 @@ from ipam.models import *
|
|||||||
from netbox.tables import NetBoxTable, columns
|
from netbox.tables import NetBoxTable, columns
|
||||||
from tenancy.tables import TenancyColumnsMixin, TenantColumn
|
from tenancy.tables import TenancyColumnsMixin, TenantColumn
|
||||||
from virtualization.models import VMInterface
|
from virtualization.models import VMInterface
|
||||||
|
from .template_code import *
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'InterfaceVLANTable',
|
'InterfaceVLANTable',
|
||||||
@ -22,40 +23,6 @@ __all__ = (
|
|||||||
|
|
||||||
AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span>')
|
AVAILABLE_LABEL = mark_safe('<span class="badge text-bg-success">Available</span>')
|
||||||
|
|
||||||
VLAN_LINK = """
|
|
||||||
{% if record.pk %}
|
|
||||||
<a href="{{ record.get_absolute_url }}">{{ record.vid }}</a>
|
|
||||||
{% elif perms.ipam.add_vlan %}
|
|
||||||
<a href="{% url 'ipam:vlan_add' %}?vid={{ record.vid }}{% if record.vlan_group %}&group={{ record.vlan_group.pk }}{% endif %}" class="btn btn-sm btn-success">{{ record.available }} VLAN{{ record.available|pluralize }} available</a>
|
|
||||||
{% else %}
|
|
||||||
{{ record.available }} VLAN{{ record.available|pluralize }} available
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
VLAN_PREFIXES = """
|
|
||||||
{% for prefix in value.all %}
|
|
||||||
<a href="{% url 'ipam:prefix' pk=prefix.pk %}">{{ prefix }}</a>{% if not forloop.last %}<br />{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
VLANGROUP_BUTTONS = """
|
|
||||||
{% with next_vid=record.get_next_available_vid %}
|
|
||||||
{% if next_vid and perms.ipam.add_vlan %}
|
|
||||||
<a href="{% url 'ipam:vlan_add' %}?group={{ record.pk }}&vid={{ next_vid }}" title="Add VLAN" class="btn btn-sm btn-success">
|
|
||||||
<i class="mdi mdi-plus-thick" aria-hidden="true"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
{% endwith %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
VLAN_MEMBER_TAGGED = """
|
|
||||||
{% if record.untagged_vlan_id == object.pk %}
|
|
||||||
<span class="text-danger"><i class="mdi mdi-close-thick"></i></span>
|
|
||||||
{% else %}
|
|
||||||
<span class="text-success"><i class="mdi mdi-check-bold"></i></span>
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# VLAN groups
|
# VLAN groups
|
||||||
|
@ -286,7 +286,8 @@ class ActionsColumn(tables.Column):
|
|||||||
if len(self.actions) == 1 or (self.split_actions and idx == 0):
|
if len(self.actions) == 1 or (self.split_actions and idx == 0):
|
||||||
dropdown_class = attrs.css_class
|
dropdown_class = attrs.css_class
|
||||||
button = (
|
button = (
|
||||||
f'<a class="btn btn-sm btn-{attrs.css_class}" href="{url}{url_appendix}" type="button" aria-label="{attrs.title}">'
|
f'<a class="btn btn-sm btn-{attrs.css_class}" href="{url}{url_appendix}" type="button" '
|
||||||
|
f'aria-label="{attrs.title}">'
|
||||||
f'<i class="mdi mdi-{attrs.icon}"></i></a>'
|
f'<i class="mdi mdi-{attrs.icon}"></i></a>'
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -303,7 +304,8 @@ class ActionsColumn(tables.Column):
|
|||||||
html += (
|
html += (
|
||||||
f'<span class="btn-group dropdown">'
|
f'<span class="btn-group dropdown">'
|
||||||
f' {button}'
|
f' {button}'
|
||||||
f' <a class="btn btn-sm btn-{dropdown_class} dropdown-toggle" type="button" data-bs-toggle="dropdown" style="padding-left: 2px">'
|
f' <a class="btn btn-sm btn-{dropdown_class} dropdown-toggle" type="button" data-bs-toggle="dropdown" '
|
||||||
|
f'style="padding-left: 2px">'
|
||||||
f' <span class="visually-hidden">{toggle_text}</span></a>'
|
f' <span class="visually-hidden">{toggle_text}</span></a>'
|
||||||
f' <ul class="dropdown-menu">{"".join(dropdown_links)}</ul>'
|
f' <ul class="dropdown-menu">{"".join(dropdown_links)}</ul>'
|
||||||
f'</span>'
|
f'</span>'
|
||||||
|
@ -2,6 +2,7 @@ from django.utils.translation import gettext_lazy as _
|
|||||||
import django_tables2 as tables
|
import django_tables2 as tables
|
||||||
|
|
||||||
from netbox.tables import columns
|
from netbox.tables import columns
|
||||||
|
from .template_code import *
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'ContactsColumnMixin',
|
'ContactsColumnMixin',
|
||||||
@ -15,15 +16,7 @@ class TenantColumn(tables.TemplateColumn):
|
|||||||
"""
|
"""
|
||||||
Include the tenant description.
|
Include the tenant description.
|
||||||
"""
|
"""
|
||||||
template_code = """
|
template_code = TENANT_COLUMN
|
||||||
{% if record.tenant %}
|
|
||||||
<a href="{{ record.tenant.get_absolute_url }}" title="{{ record.tenant.description }}">{{ record.tenant }}</a>
|
|
||||||
{% elif record.vrf.tenant %}
|
|
||||||
<a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
|
|
||||||
{% else %}
|
|
||||||
—
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super().__init__(template_code=self.template_code, *args, **kwargs)
|
super().__init__(template_code=self.template_code, *args, **kwargs)
|
||||||
@ -36,15 +29,7 @@ class TenantGroupColumn(tables.TemplateColumn):
|
|||||||
"""
|
"""
|
||||||
Include the tenant group description.
|
Include the tenant group description.
|
||||||
"""
|
"""
|
||||||
template_code = """
|
template_code = TENANT_GROUP_COLUMN
|
||||||
{% if record.tenant and record.tenant.group %}
|
|
||||||
<a href="{{ record.tenant.group.get_absolute_url }}" title="{{ record.tenant.group.description }}">{{ record.tenant.group }}</a>
|
|
||||||
{% elif record.vrf.tenant and record.vrf.tenant.group %}
|
|
||||||
<a href="{{ record.vrf.tenant.group.get_absolute_url }}" title="{{ record.vrf.tenant.group.description }}">{{ record.vrf.tenant.group }}</a>*
|
|
||||||
{% else %}
|
|
||||||
—
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, accessor=tables.A('tenant__group'), *args, **kwargs):
|
def __init__(self, accessor=tables.A('tenant__group'), *args, **kwargs):
|
||||||
if 'verbose_name' not in kwargs:
|
if 'verbose_name' not in kwargs:
|
||||||
|
19
netbox/tenancy/tables/template_code.py
Normal file
19
netbox/tenancy/tables/template_code.py
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
TENANT_COLUMN = """
|
||||||
|
{% if record.tenant %}
|
||||||
|
<a href="{{ record.tenant.get_absolute_url }}" title="{{ record.tenant.description }}">{{ record.tenant }}</a>
|
||||||
|
{% elif record.vrf.tenant %}
|
||||||
|
<a href="{{ record.vrf.tenant.get_absolute_url }}" title="{{ record.vrf.tenant.description }}">{{ record.vrf.tenant }}</a>*
|
||||||
|
{% else %}
|
||||||
|
—
|
||||||
|
{% endif %}
|
||||||
|
"""
|
||||||
|
|
||||||
|
TENANT_GROUP_COLUMN = """
|
||||||
|
{% if record.tenant and record.tenant.group %}
|
||||||
|
<a href="{{ record.tenant.group.get_absolute_url }}" title="{{ record.tenant.group.description }}">{{ record.tenant.group }}</a>
|
||||||
|
{% elif record.vrf.tenant and record.vrf.tenant.group %}
|
||||||
|
<a href="{{ record.vrf.tenant.group.get_absolute_url }}" title="{{ record.vrf.tenant.group.description }}">{{ record.vrf.tenant.group }}</a>*
|
||||||
|
{% else %}
|
||||||
|
—
|
||||||
|
{% endif %}
|
||||||
|
"""
|
32
netbox/virtualization/tables/template_code.py
Normal file
32
netbox/virtualization/tables/template_code.py
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
VMINTERFACE_BUTTONS = """
|
||||||
|
{% if perms.virtualization.change_vminterface %}
|
||||||
|
<span class="dropdown">
|
||||||
|
<button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Add">
|
||||||
|
<span class="mdi mdi-plus-thick" aria-hidden="true"></span>
|
||||||
|
</button>
|
||||||
|
<ul class="dropdown-menu dropdown-menu-end">
|
||||||
|
{% if perms.ipam.add_ipaddress %}
|
||||||
|
<li><a class="dropdown-item" href="{% url 'ipam:ipaddress_add' %}?vminterface={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">IP Address</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% if perms.dcim.add_macaddress %}
|
||||||
|
<li><a class="dropdown-item" href="{% url 'dcim:macaddress_add' %}?vminterface={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">MAC Address</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% if perms.vpn.add_l2vpntermination %}
|
||||||
|
<li><a class="dropdown-item" href="{% url 'vpn:l2vpntermination_add' %}?virtual_machine={{ object.pk }}&vminterface={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">L2VPN Termination</a></li>
|
||||||
|
{% endif %}
|
||||||
|
{% if perms.ipam.add_fhrpgroupassignment %}
|
||||||
|
<li><a class="dropdown-item" href="{% url 'ipam:fhrpgroupassignment_add' %}?interface_type={{ record|content_type_id }}&interface_id={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">Assign FHRP Group</a></li>
|
||||||
|
{% endif %}
|
||||||
|
</ul>
|
||||||
|
</span>
|
||||||
|
{% endif %}
|
||||||
|
{% if perms.vpn.add_tunnel and not record.tunnel_termination %}
|
||||||
|
<a href="{% url 'vpn:tunnel_add' %}?termination1_type=virtualization.virtualmachine&termination1_parent={{ record.virtual_machine.pk }}&termination1_termination={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" title="Create a tunnel" class="btn btn-success btn-sm">
|
||||||
|
<i class="mdi mdi-tunnel-outline" aria-hidden="true"></i>
|
||||||
|
</a>
|
||||||
|
{% elif perms.vpn.delete_tunneltermination and record.tunnel_termination %}
|
||||||
|
<a href="{% url 'vpn:tunneltermination_delete' pk=record.tunnel_termination.pk %}?return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" title="Remove tunnel" class="btn btn-danger btn-sm">
|
||||||
|
<i class="mdi mdi-tunnel-outline" aria-hidden="true"></i>
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
"""
|
@ -6,6 +6,7 @@ from netbox.tables import NetBoxTable, columns
|
|||||||
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
|
from tenancy.tables import ContactsColumnMixin, TenancyColumnsMixin
|
||||||
from utilities.templatetags.helpers import humanize_megabytes
|
from utilities.templatetags.helpers import humanize_megabytes
|
||||||
from virtualization.models import VirtualDisk, VirtualMachine, VMInterface
|
from virtualization.models import VirtualDisk, VirtualMachine, VMInterface
|
||||||
|
from .template_code import *
|
||||||
|
|
||||||
__all__ = (
|
__all__ = (
|
||||||
'VirtualDiskTable',
|
'VirtualDiskTable',
|
||||||
@ -15,39 +16,6 @@ __all__ = (
|
|||||||
'VMInterfaceTable',
|
'VMInterfaceTable',
|
||||||
)
|
)
|
||||||
|
|
||||||
VMINTERFACE_BUTTONS = """
|
|
||||||
{% if perms.virtualization.change_vminterface %}
|
|
||||||
<span class="dropdown">
|
|
||||||
<button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Add">
|
|
||||||
<span class="mdi mdi-plus-thick" aria-hidden="true"></span>
|
|
||||||
</button>
|
|
||||||
<ul class="dropdown-menu dropdown-menu-end">
|
|
||||||
{% if perms.ipam.add_ipaddress %}
|
|
||||||
<li><a class="dropdown-item" href="{% url 'ipam:ipaddress_add' %}?vminterface={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">IP Address</a></li>
|
|
||||||
{% endif %}
|
|
||||||
{% if perms.dcim.add_macaddress %}
|
|
||||||
<li><a class="dropdown-item" href="{% url 'dcim:macaddress_add' %}?vminterface={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">MAC Address</a></li>
|
|
||||||
{% endif %}
|
|
||||||
{% if perms.vpn.add_l2vpntermination %}
|
|
||||||
<li><a class="dropdown-item" href="{% url 'vpn:l2vpntermination_add' %}?virtual_machine={{ object.pk }}&vminterface={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">L2VPN Termination</a></li>
|
|
||||||
{% endif %}
|
|
||||||
{% if perms.ipam.add_fhrpgroupassignment %}
|
|
||||||
<li><a class="dropdown-item" href="{% url 'ipam:fhrpgroupassignment_add' %}?interface_type={{ record|content_type_id }}&interface_id={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}">Assign FHRP Group</a></li>
|
|
||||||
{% endif %}
|
|
||||||
</ul>
|
|
||||||
</span>
|
|
||||||
{% endif %}
|
|
||||||
{% if perms.vpn.add_tunnel and not record.tunnel_termination %}
|
|
||||||
<a href="{% url 'vpn:tunnel_add' %}?termination1_type=virtualization.virtualmachine&termination1_parent={{ record.virtual_machine.pk }}&termination1_termination={{ record.pk }}&return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" title="Create a tunnel" class="btn btn-success btn-sm">
|
|
||||||
<i class="mdi mdi-tunnel-outline" aria-hidden="true"></i>
|
|
||||||
</a>
|
|
||||||
{% elif perms.vpn.delete_tunneltermination and record.tunnel_termination %}
|
|
||||||
<a href="{% url 'vpn:tunneltermination_delete' pk=record.tunnel_termination.pk %}?return_url={% url 'virtualization:virtualmachine_interfaces' pk=object.pk %}" title="Remove tunnel" class="btn btn-danger btn-sm">
|
|
||||||
<i class="mdi mdi-tunnel-outline" aria-hidden="true"></i>
|
|
||||||
</a>
|
|
||||||
{% endif %}
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Virtual machines
|
# Virtual machines
|
||||||
|
Loading…
Reference in New Issue
Block a user