first commit
This commit is contained in:
77
netbox_librenms_plugin/views/object_sync/vms.py
Normal file
77
netbox_librenms_plugin/views/object_sync/vms.py
Normal file
@@ -0,0 +1,77 @@
|
||||
import copy
|
||||
|
||||
from django.urls import reverse
|
||||
from utilities.views import ViewTab, register_model_view
|
||||
from virtualization.models import VirtualMachine
|
||||
|
||||
from netbox_librenms_plugin.constants import PERM_VIEW_PLUGIN
|
||||
from netbox_librenms_plugin.tables.interfaces import LibreNMSVMInterfaceTable
|
||||
from netbox_librenms_plugin.utils import get_interface_name_field
|
||||
|
||||
from ..base.interfaces_view import BaseInterfaceTableView
|
||||
from ..base.ip_addresses_view import BaseIPAddressTableView
|
||||
from ..base.librenms_sync_view import BaseLibreNMSSyncView
|
||||
|
||||
|
||||
@register_model_view(VirtualMachine, name="librenms_sync", path="librenms-sync")
|
||||
class VMLibreNMSSyncView(BaseLibreNMSSyncView):
|
||||
"""Virtual machine detail tab for LibreNMS sync data."""
|
||||
|
||||
queryset = VirtualMachine.objects.all()
|
||||
model = VirtualMachine
|
||||
tab = ViewTab(
|
||||
label="LibreNMS Sync",
|
||||
permission=PERM_VIEW_PLUGIN,
|
||||
)
|
||||
|
||||
def get_interface_context(self, request, obj):
|
||||
"""Return interface sync context for the virtual machine."""
|
||||
interface_name_field = get_interface_name_field(request)
|
||||
interface_sync_view = VMInterfaceTableView()
|
||||
interface_sync_view.request = copy.copy(request)
|
||||
return interface_sync_view.get_context_data(interface_sync_view.request, obj, interface_name_field)
|
||||
|
||||
def get_cable_context(self, request, obj):
|
||||
"""Return None; VMs do not support cable sync."""
|
||||
return None # VMs do not expose cable sync data
|
||||
|
||||
def get_vlan_context(self, request, obj):
|
||||
"""Return None; VMs do not support VLAN sync."""
|
||||
return None
|
||||
|
||||
def get_ip_context(self, request, obj):
|
||||
"""Return IP address sync context for the virtual machine."""
|
||||
ipaddress_sync_view = VMIPAddressTableView()
|
||||
ipaddress_sync_view.request = copy.copy(request)
|
||||
return ipaddress_sync_view.get_context_data(ipaddress_sync_view.request, obj)
|
||||
|
||||
|
||||
class VMInterfaceTableView(BaseInterfaceTableView):
|
||||
"""Interface synchronization view for Virtual Machines."""
|
||||
|
||||
model = VirtualMachine
|
||||
|
||||
def get_table(self, data, obj, interface_name_field, vlan_groups=None):
|
||||
"""Return a VM interface table for the given data."""
|
||||
return LibreNMSVMInterfaceTable(
|
||||
data,
|
||||
device=obj,
|
||||
vlan_groups=vlan_groups,
|
||||
server_key=self.librenms_api.server_key,
|
||||
interface_name_field=interface_name_field,
|
||||
)
|
||||
|
||||
def get_interfaces(self, obj):
|
||||
"""Return all interfaces for the virtual machine."""
|
||||
return obj.interfaces.all()
|
||||
|
||||
def get_redirect_url(self, obj):
|
||||
"""Return the VM interface sync redirect URL."""
|
||||
return reverse("plugins:netbox_librenms_plugin:vm_interface_sync", kwargs={"pk": obj.pk})
|
||||
|
||||
|
||||
class VMIPAddressTableView(BaseIPAddressTableView):
|
||||
"""IP address synchronization view for Virtual Machines."""
|
||||
|
||||
model = VirtualMachine
|
||||
# VM-specific implementations
|
||||
Reference in New Issue
Block a user