RestoreArchiveJob.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\App\Jobs\Cloud;
  3. use Illuminate\Database\Capsule\Manager as DB;
  4. use MGProvision\Proxmox\v2\Api;
  5. use MGProvision\Proxmox\v2\models\Kvm;
  6. use MGProvision\Proxmox\v2\models\Lxc;
  7. use MGProvision\Proxmox\v2\ProxmoxApiException;
  8. use ModulesGarden\ProxmoxAddon\App\Events\Cloud\QemuUpdateEvent;
  9. use ModulesGarden\ProxmoxAddon\App\Events\Cloud\VmCreatedEvent;
  10. use ModulesGarden\ProxmoxAddon\App\Jobs\BaseJob;
  11. use ModulesGarden\ProxmoxAddon\App\Models\TaskHistory;
  12. use ModulesGarden\ProxmoxAddon\App\Models\VmIpAddress;
  13. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\AdditionalDiskService;
  14. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\AgentService;
  15. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ContainerService;
  16. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  17. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\UserService;
  18. use ModulesGarden\ProxmoxAddon\App\Services\EmailService;
  19. use function ModulesGarden\ProxmoxAddon\Core\Helper\fire;
  20. use function ModulesGarden\ProxmoxAddon\Core\Helper\sl;
  21. class RestoreArchiveJob extends CloneQemuJob
  22. {
  23. public function handle()
  24. {
  25. $this->initParams();
  26. $this->initServices();
  27. //create task validation
  28. if ($this->isDone())
  29. {
  30. $this->initVm();
  31. $this->qemuUpdate();
  32. if ($this->agentUpdate()) {
  33. fire(new VmCreatedEvent($this->getVmModel()));
  34. return true;
  35. }
  36. return false;
  37. }
  38. elseif ($this->isTaskRunning())
  39. {
  40. //sleep
  41. $this->sleep(5);
  42. return false;
  43. }
  44. try
  45. {
  46. Api::beginTransaction();
  47. DB::beginTransaction();
  48. list($backupNode, $volid) = explode(":", $this->getModelData()['archive'], 2);
  49. //vmid
  50. $vmid = $this->nextVmid();
  51. $vm = new Kvm($backupNode,$vmid);
  52. $vmModel = $this->getVmModel();
  53. $vmModel->vmid = $vmid;
  54. $vmModel->node = $backupNode;
  55. $vmModel->save();
  56. sl('Vm')->setVm(null);
  57. sl('Vm')->setVmModel( $vmModel);
  58. $vm->setApi($this->api());
  59. $container = [
  60. 'vmid' => $vmid,
  61. 'archive' => $volid
  62. ];
  63. $taskId = $vm->create($container);
  64. DB::commit();
  65. }
  66. catch (\Exception $ex)
  67. {
  68. DB::rollBack();
  69. Api::commit();
  70. $this->failed($ex->getMessage());
  71. throw $ex;
  72. }
  73. //task history
  74. $this->createTaskHistory($taskId, "Create");
  75. //save task id
  76. $this->putModelDataAndSave(["taskId" => $taskId, "node" => $backupNode]);
  77. //sleep
  78. $this->sleep();
  79. return false;
  80. }
  81. }