ImportVmProvider.php 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxCloudVps\App\UI\Vms\Providers;
  3. use MGProvision\Proxmox\v2\repository\ClusterResourcesRepository;
  4. use ModulesGarden\ProxmoxAddon\App\Models\VmModel;
  5. use ModulesGarden\ProxmoxAddon\App\Models\Whmcs\Hosting;
  6. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  7. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  8. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\UserService;
  9. use ModulesGarden\ProxmoxAddon\App\Services\CloudService;
  10. use ModulesGarden\Servers\ProxmoxCloudVps\App\Helpers\AppParams;
  11. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Interfaces\ClientArea;
  12. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\ResponseTemplates\HtmlDataJsonResponse;
  13. use ModulesGarden\Servers\ProxmoxCloudVps\Core\UI\Widget\Forms\DataProviders\BaseDataProvider;
  14. class ImportVmProvider extends BaseDataProvider implements ClientArea
  15. {
  16. use ProductService;
  17. use ApiService;
  18. use UserService;
  19. public function read()
  20. {
  21. $this->api();
  22. $clusterResurces = new ClusterResourcesRepository();
  23. $clusterResurces->findVm();
  24. //qemu or lxc
  25. $this->configuration()->isQemu() ? $clusterResurces->findQemu() : $clusterResurces->findLxc();
  26. foreach ($clusterResurces->fetch() as $resource){
  27. if($resource->getTemplate()){
  28. continue;
  29. }
  30. if(VmModel::where("vmid", $resource->getVmid())->count()){
  31. continue;
  32. }
  33. if(Hosting::ofCustomFielVmid($resource->getVmid())->count()){
  34. continue;
  35. }
  36. $this->availableValues['vmid'][$resource->getVmid()] = sprintf("VMID: %s (%s)", $resource->getVmid(), $resource->getName());
  37. }
  38. }
  39. public function update()
  40. {
  41. }
  42. public function delete()
  43. {
  44. }
  45. public function import()
  46. {
  47. $this->api();
  48. $clusterResurces = new ClusterResourcesRepository();
  49. $clusterResurces->findVm();
  50. $clusterResurces->findVmid($this->getFormDataValues()['vmid']);
  51. $resurce = $clusterResurces->firstOrFail();
  52. $vm = $resurce->getVm();
  53. $vmModel = new VmModel();
  54. $vmModel->hosting_id = $this->getWhmcsParamByKey('serviceid');
  55. $vmModel->vmid = $vm->getVmid();
  56. $vmModel->node = $vm->getNode();
  57. $vmModel->name = $resurce->getName();
  58. $vmModel->virtualization = $this->configuration()->getVirtualization();
  59. $vmModel->password = encrypt($this->getFormDataValues()['password']);
  60. $vmModel->cores = $vm->config()['cores'];
  61. $vmModel->sockets = (int) $vm->config()['sockets'];
  62. $vmModel->vcpus = (int) $vm->config()['vcpus'];
  63. $vmModel->cpulimit = $vm->config()['cpulimit'];
  64. $vmModel->cpuunits = $vm->config()['cpuunits'];
  65. $vmModel->memory = $vm->config()['memory'];
  66. $vmModel->swap = (int) $vm->config()['swap'];
  67. $vmModel->disk = (int) $vm->getMasterHddSize();
  68. if($this->configuration()->isQemu()){
  69. $vmModel->disks = (int) $vm->getHardDiskRepostiory()->additionalSize();
  70. }
  71. if($this->configuration()->isLxc()){
  72. $vmModel->disks = (int) $vm->getMounPoints()->additionalSize();
  73. }
  74. $this->userUpdatePermission([$vmModel->vmid]);
  75. $vmModel->save();
  76. return (new HtmlDataJsonResponse())
  77. ->setStatusSuccess()
  78. ->setMessageAndTranslate('The Virtual Machine has been imported successfully');
  79. }
  80. }