/opt/netbox/report.py
class VMDeviceReport(Script):
    class Meta:
        name = "VM Device prüfen"
        description = "Prüft, ob ein Device bei VMs angegeben ist."

    def test_vm_host_devices(self):
        """Prüft, ob der VM das konkrete physische Host-Device (Hypervisor) zugewiesen wurde (außer OpenStack)."""
        active_vms = VirtualMachine.objects.filter(status="active")
        for vm in active_vms:
            # 1. Prüfen, ob die VM ein Cluster hat und ob der Cluster-Typ OpenStack ist
            if vm.cluster and vm.cluster.type:
                cluster_type_name = vm.cluster.type.name.lower()
                if "openstack" in cluster_type_name:
                    self.log_success("OpenStack VM - Physisches Host-Device nicht erforderlich.", obj=vm)
                    continue

            # 2. Reguläre Prüfung für alle anderen Cluster-Typen (VMware, Proxmox etc.)
            if vm.device_id is None:
                self.log_failure("Der VM ist kein physisches Host-Device (Server) zugewiesen.", obj=vm)
            else:
                self.log_success(f"Läuft auf Host-Device: {vm.device.name}", obj=vm)