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()
{
$title = 'Add Virtual Machine';
return view('administrator.pages.package.vm.add', compact('title'));
}
public function store(Request $request)
{
$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)
{
$vm = $this->virtualMachineRepository->find($id);
if (!$vm) {
return back()->withErrors('Invalid request.');
}
$vm->load('datacenter', 'host');
$title = 'Edit Virtual Machine';
return view('administrator.pages.package.vm.edit', compact('title', 'vm'));
}
public function update(Request $request, $id)
{
$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)
{
$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'],
[],
['*'],
true
);
return DataTables::eloquent($query)
->addColumn(
'action',
function ($d) {
return view('administrator.pages.package.vm.datatable.action', ['row' => $d])->render();
}
)
->editColumn('updated_at', function ($d) {
return $d->updated_at ? $d->updated_at->format('H:i:s d/m/Y') : '';
})
->editColumn('power_state', function ($d) {
if ($d->power_state == 'POWERED_ON') {
return 'Đang bật';
} elseif ($d->power_state == 'POWERED_OFF') {
return 'Đang tắt';
}
return $d->power_state ?? 'N/A';
})
->editColumn('datacenter.name', function ($d) {
return $d->datacenter ? $d->datacenter->name . ' - ' . $d->datacenter->datacenter_id : 'N/A';
})
->rawColumns(['action', 'power_state'])
->make(true);
}
}