MigrateVmJob.php 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\App\Jobs\Cloud\LoadBalancer;
  3. use ModulesGarden\ProxmoxAddon\App\Jobs\BaseJob;
  4. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\HighAvailabilityClusterService;
  5. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\HostingService;
  6. use ModulesGarden\ProxmoxAddon\App\Services\Cloud\ProductService;
  7. use function ModulesGarden\ProxmoxAddon\Core\Helper\sl;
  8. class MigrateVmJob extends BaseJob
  9. {
  10. use ProductService;
  11. use HostingService;
  12. /**
  13. * @var HighAvailabilityClusterService
  14. */
  15. protected $highAvailabilityClusterService;
  16. public function handle($text = null)
  17. {
  18. $this->initParams();
  19. $this->initServices();
  20. $this->setHostingId($this->getWhmcsParamByKey("serviceid"));
  21. $this->initVm();
  22. $this->highAvailabilityClusterService = new HighAvailabilityClusterService();
  23. //Migrate
  24. if (!$this->getModelData()['taskId'] || ($this->isTask() && !$this->isTaskRunning() && $this->isFailed()))
  25. {
  26. $this->highAvailabilityClusterService->delete();
  27. $delete = (array)$this->getModelData()['config']['delete'];
  28. foreach (sl('Vm')->getVm()->config() as $k => $v)
  29. {
  30. if (preg_match('/cloudinit/', $v))
  31. {
  32. sl('Vm')->getVm()->deleteConfig($k);
  33. $delete[$k] = $v;
  34. }
  35. }
  36. $taskId = sl('Vm')->getVm()->migrate([
  37. "target" => $this->getModelData()['targetNode'],
  38. "online" => sl('Vm')->getVm()->isRunning() ? 1 : 0,
  39. ]);
  40. //save task id
  41. $this->putModelDataAndSave(["taskId" => $taskId, "node" => sl('Vm')->getVm()->getNode(), "migrate" => true, "config" => ["delete" => $delete]]);
  42. $this->log->info(sprintf("VM %s - Migrate", sl('Vm')->getVm()->getVmid()));
  43. //sleep
  44. $this->sleep(20);
  45. return false;
  46. }
  47. else
  48. {
  49. if ($this->isDone())
  50. {
  51. $this->customFieldUpdate("node", $this->getModelData()['targetNode']);
  52. sl('Vm')->getVm()->setNode($this->getModelData()['targetNode']);
  53. $delete = (array)$this->getModelData()['config']['delete'];
  54. foreach ($delete as $k => $v)
  55. {
  56. if (preg_match('/cloudinit/', $v))
  57. {
  58. $ex = explode(":", $v);
  59. $storage = $ex[0];
  60. sl('Vm')->getVm()->updateConfig([$k => "{$storage}:cloudinit,format=raw"]);
  61. unset($delete[$k]);
  62. }
  63. }
  64. return true;
  65. }
  66. else
  67. {
  68. if ($this->isTaskRunning())
  69. {
  70. //sleep
  71. $this->sleep(20);
  72. return false;
  73. }
  74. }
  75. }
  76. return true;
  77. }
  78. }