VmTemplate::with('hypervisor')->orderBy('name')->paginate(20), ]); } public function create() { return Inertia::render('Hypervisor/TemplateCreate', [ 'hypervisors' => Hypervisor::where('status', 'online')->get(), ]); } public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string|max:100', 'hypervisor_id' => 'nullable|exists:hypervisors,id', 'os_type' => 'required|string', 'cpu_count' => 'integer|min:1', 'memory_mb' => 'integer|min:512', 'disk_gb' => 'integer|min:1', 'customization' => 'nullable|array', 'provision_script' => 'nullable|string', ]); VmTemplate::create([...$validated, 'created_by' => auth()->id()]); return redirect()->route('templates.index')->with('success', 'Template created.'); } public function show(VmTemplate $template) { return Inertia::render('Hypervisor/TemplateShow', ['template' => $template->load('hypervisor')]); } public function edit(VmTemplate $template) { return Inertia::render('Hypervisor/TemplateEdit', [ 'template' => $template, 'hypervisors' => Hypervisor::where('status', 'online')->get(), ]); } public function update(Request $request, VmTemplate $template) { $template->update($request->except('_token')); return redirect()->route('templates.show', $template)->with('success', 'Template updated.'); } public function destroy(VmTemplate $template) { $template->delete(); return redirect()->route('templates.index')->with('success', 'Template deleted.'); } public function deploy(Request $request, VmTemplate $template) { $data = $request->validate([ 'vm_name' => 'required|string', 'hypervisor_id' => 'required|exists:hypervisors,id', ]); // Dispatch deploy job return back()->with('success', 'Deployment queued.'); } }