update sync vm

This commit is contained in:
pbao9
2026-02-05 21:57:57 +07:00
parent 3a01d07a74
commit eef04846a8
11 changed files with 436 additions and 76 deletions
@@ -1,38 +1,148 @@
<?php
<?php
namespace App\Http\Controllers\admin\vm;
use App\Http\Controllers\Controller;
use App\Jobs\VirtualMachine\Sync\SyncVirtualMachine;
use App\Repositories\Module\VirtualMachine\VirtualMachineRepositoryInterface;
use App\Repositories\vCenter\vCenterRepositoryInterface;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str;
use Yajra\DataTables\Facades\DataTables;
class VirtualMachineController extends Controller
{
public function index()
public function __construct(
public VirtualMachineRepositoryInterface $virtualMachineRepository,
public vCenterRepositoryInterface $vCenterRepository
) {
parent::__construct();
}
public function index(Request $request)
{
return view('administrator.pages.package.vm.index');
$vms = $this->virtualMachineRepository->filter(
[
'page' => $request->get('page') ?? 1
]
);
$title = 'List all Virtual Machine';
return view('administrator.pages.package.vm.index', compact('vms', 'title'));
}
public function create()
{
return view('administrator.pages.package.vm.add');
$title = 'Add Virtual Machine';
return view('administrator.pages.package.vm.add', compact('title'));
}
public function store(Request $request)
{
return view('administrator.pages.package.vm.index');
$request->validate([
'vm_id' => 'required|unique:virtual_machines,vm_id',
'name' => 'required',
]);
DB::beginTransaction();
try {
$data = $request->all();
if (empty($data['uuid'])) {
$data['uuid'] = Str::uuid();
}
$this->virtualMachineRepository->create($data);
DB::commit();
} catch (Exception $error) {
DB::rollBack();
return back()->withErrors($error->getMessage());
}
return redirect()->route('package.vm.index')->with('success', 'Add new VM successfully!');
}
public function edit($id)
{
return view('administrator.pages.package.vm.edit');
$vm = $this->virtualMachineRepository->find($id);
if (!$vm) {
return back()->withErrors('Invalid request.');
}
$title = 'Edit Virtual Machine';
return view('administrator.pages.package.vm.edit', compact('title', 'vm'));
}
public function update(Request $request, $id)
{
return view('administrator.pages.package.vm.index');
$vm = $this->virtualMachineRepository->find($id);
if (!$vm) {
return back()->withErrors('Invalid request.');
}
$request->validate([
'name' => 'required',
'vm_id' => 'required|unique:virtual_machines,vm_id,' . $id,
]);
DB::beginTransaction();
try {
$this->virtualMachineRepository->update($id, $request->all());
DB::commit();
} catch (Exception $error) {
DB::rollBack();
return back()->withErrors($error->getMessage());
}
return redirect()->route('package.vm.index')->with('success', 'Update VM successfully!');
}
public function destroy($id)
{
return view('administrator.pages.package.vm.index');
$vm = $this->virtualMachineRepository->find($id);
if (!$vm) {
return back()->withErrors('Invalid request.');
}
DB::beginTransaction();
try {
$this->virtualMachineRepository->delete($id);
DB::commit();
} catch (Exception $error) {
DB::rollBack();
return back()->withErrors($error->getMessage());
}
return redirect()->route('package.vm.index')->with('success', 'Deleted VM successfully!');
}
public function sync(SyncVirtualMachine $syncVM)
{
dispatch($syncVM)->delay(now()->addSeconds(5));
return back()->with('success', 'The process is being established, please wait');
}
public function datatable(Request $request)
{
$query = $this->virtualMachineRepository->filter(
$request->all(),
['datacenter', 'host'],
[],
['*'],
true
);
return DataTables::eloquent($query)
->addColumn(
'action',
function ($d) {
return '<a href="' . route('package.vm.edit', $d->id) . '" class="btn btn-warning btn-sm"><i class="fas fa-search"></i></a>
<form method="post" class="d-inline" action="' . route('package.vm.destroy', $d->id) . '">
' . csrf_field() . '
' . method_field('delete') . '
<button type="submit" class="btn btn-sm btn-danger"><i class="fas fa-trash"></i></button>
</form>';
}
)
->editColumn('updated_at', function ($d) {
return $d->updated_at ? $d->updated_at->format('H:i:s d/m/Y') : '';
})
->rawColumns(['action'])
->make(true);
}
}