added proxmox power button plugin 0.1

This commit is contained in:
2026-08-05 04:46:26 +02:00
parent 28fa9afa28
commit c8f5baedde
15 changed files with 817 additions and 1 deletions

View File

@@ -0,0 +1,40 @@
# SPDX-License-Identifier: GPL-2.0-or-later
# Copyright (C) 2026 Bryan Joshua Pedini
"""
Signal receivers for the proxmox_power_button plugin.
Enforce that a VMID is unique *within its cluster*. This runs on post_clean —
fired during full_clean() — so it surfaces as a normal validation error in both
the UI forms and the REST API, covering VM creation, VMID edits, and moving a VM
to a different cluster.
(The custom fields themselves are provisioned by migrations/0001_initial.py.)
"""
from django.core.exceptions import ValidationError
from django.dispatch import receiver
from netbox.signals import post_clean
from virtualization.models import VirtualMachine
VMID_FIELD = "vmid"
@receiver(post_clean, sender=VirtualMachine)
def enforce_vmid_unique_per_cluster(sender, instance, **kwargs):
data = instance.custom_field_data or {}
vmid = data.get(VMID_FIELD)
# Nothing to check until both a VMID and a cluster are set.
if vmid is None or instance.cluster_id is None:
return
duplicate = (
VirtualMachine.objects
.filter(cluster_id=instance.cluster_id, custom_field_data__vmid=vmid)
.exclude(pk=instance.pk or 0)
.first()
)
if duplicate is not None:
raise ValidationError(
f"VMID {vmid} is already assigned to VM '{duplicate.name}' in "
f"cluster '{instance.cluster}'. VMIDs must be unique within a cluster."
)