import AppLayout from '@/Layouts/AppLayout'; import { Head, useForm, router } from '@inertiajs/react'; import { useState } from 'react'; import { motion } from 'framer-motion'; import { Server, CheckCircle, XCircle, Loader2 } from 'lucide-react'; import { GlassCard } from '@/Components/ui/GlassCard'; import { Button } from '@/Components/ui/Button'; import { cn } from '@/lib/utils'; const TYPES = [ { value: 'vcenter', label: 'VMware vCenter', port: 443 }, { value: 'esxi', label: 'VMware ESXi', port: 443 }, { value: 'proxmox', label: 'Proxmox VE', port: 8006 }, { value: 'hyper-v', label: 'Hyper-V', port: 5985 }, { value: 'xen', label: 'XenServer', port: 443 }, { value: 'kvm', label: 'KVM/QEMU', port: 22 }, ]; function Field({ label, error, children }) { return (
{children} {error &&

{error}

}
); } function Input({ className, ...props }) { return ( ); } export default function HypervisorCreate() { const { data, setData, post, processing, errors } = useForm({ name: '', type: 'vcenter', host: '', port: 443, username: '', password: '', ssl_verify: true, datacenter: '', }); const [testResult, setTestResult] = useState(null); const [testing, setTesting] = useState(false); const handleTypeChange = (type) => { const t = TYPES.find(t => t.value === type); setData(d => ({ ...d, type, port: t?.port ?? 443 })); }; const testConn = async () => { setTesting(true); setTestResult(null); try { const res = await fetch('/hypervisors/test-temp', { method: 'POST', headers: { 'Content-Type': 'application/json', 'X-CSRF-TOKEN': document.querySelector('meta[name=csrf-token]').content }, body: JSON.stringify(data), }); const json = await res.json(); setTestResult(json); } catch (e) { setTestResult({ success: false, message: 'Connection failed: ' + e.message }); } finally { setTesting(false); } }; return (

Add Hypervisor

Connect a new virtualization platform

{ e.preventDefault(); post('/hypervisors'); }} className="space-y-5"> {/* Type selector */}
{TYPES.map(t => ( ))}
setData('name', e.target.value)} placeholder="Production vCenter" required />
setData('host', e.target.value)} placeholder="vcenter.example.com" required />
setData('port', parseInt(e.target.value))} />
setData('username', e.target.value)} placeholder="administrator@vsphere.local" required /> setData('password', e.target.value)} required />
setData('datacenter', e.target.value)} placeholder="Datacenter name" /> {/* Test Result */} {testResult && ( {testResult.success ? : } {testResult.message} )}
); }