http://modulesgarden.com * CONTACT -> contact@modulesgarden.com * * * This software is furnished under a license and may be used and copied * only in accordance with the terms of such license and with the * inclusion of the above copyright notice. This software or any other * copies thereof may not be provided or otherwise made available to any * other person. No title to and ownership of the software is hereby * transferred. * * * ******************************************************************** */ namespace ModulesGarden\ProxmoxAddon\App\Cron; use MGProvision\Proxmox\v2 as proxmox; use ModulesGarden\ProxmoxAddon as main; use ModulesGarden\ProxmoxAddon\Core\CommandLine\Command; use ModulesGarden\ProxmoxAddon\Core\CommandLine\Hypervisor; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Output\OutputInterface; use Symfony\Component\Console\Style\SymfonyStyle; /** * Description of MigrateSync * * @author Pawel Kopec */ class MigrateSync extends Command { use main\App\Services\BaseService; /** Command name * @var string */ protected $name = 'migrateSync'; /** * Command description * @var string */ protected $description = ''; /** * Command help text * @var string */ protected $help = ''; /** * Run your custom code * @param InputInterface $input * @param OutputInterface $output * @return int|null|void */ protected function process(InputInterface $input, OutputInterface $output, SymfonyStyle $io) { $io->title('Synchronize migrate: Starting'); if (!function_exists('ModuleBuildParams')) { require_once ROOTDIR . DIRECTORY_SEPARATOR . 'includes' . DIRECTORY_SEPARATOR . "modulefunctions.php"; } //Get Hostings $h = (new main\Core\Models\Whmcs\Hosting)->getTable(); $s = (new main\Core\Models\Whmcs\Server)->getTable(); $hostings = main\Core\Models\Whmcs\Hosting::select("{$h}.*") ->rightJoin($s, "{$h}.server", '=', "{$s}.id") ->whereIn("{$h}.domainstatus", ["Active", "Suspended"]) ->whereIn("{$s}.type", ["proxmoxVPS", "ProxmoxCloudVps"]) ->orderBy("{$h}.server"); $i = 0; foreach ($hostings->get() as $hosting) { /* @var $hosting main\Core\Models\Whmcs\Hosting */ $i++; $output->writeln(sprintf("Synchronize hosting: %s", $hosting->id)); try { $params = \ModuleBuildParams($hosting->id); $this->setServerId($hosting->server); if ($this->getServer()->id != $this->getServerId()) { unset($this->server, $this->api); } $this->getApi()->setInstance(); $resurceRepository = new proxmox\repository\ClusterResourcesRepository; if ($params['moduletype'] == "proxmoxVPS") { if (!$params['customfields']['vmid']) { throw new \Exception("Custom Field \"vmid\" is empty"); } if (!$params['customfields']['node']) { throw new \Exception("Custom Field \"node\" is empty"); } foreach ($resurceRepository->fetch() as $resource) { if ($resource->getVmid() == $params['customfields']['vmid'] && $params['customfields']['node'] != $resource->getNode()) { $output->writeln(sprintf("Hosting: %s, migration has been found on VMID %s", $hosting->id, $params['customfields']['vmid'])); $f = (new main\Core\Models\Whmcs\CustomField)->getTable(); $fv = (new main\Core\Models\Whmcs\CustomFieldValue())->getTable(); $cf = main\Core\Models\Whmcs\CustomFieldValue::rightJoin($f, "{$fv}.fieldid", '=', "{$f}.id") ->where("{$f}.type", "product") ->where("{$fv}.relid", $hosting->id) ->where("{$f}.fieldname", "LIKE", "node%") ->update(["value" => $resource->getNode()]); break; } } } else { if ($params['moduletype'] == "ProxmoxCloudVps") { $vservers = main\App\Models\VmModel::ofHostingId($hosting->id); foreach ($vservers->get() as $vserver) { foreach ($resurceRepository->fetch() as $resource) { if ($resource->getVmid() == $vserver->vmid && $vserver->node != $resource->getNode()) { $output->writeln(sprintf("Hosting: %s, migration has been found on VMID %s", $hosting->id, $vserver->vmid)); $vserver->node = $resource->getNode(); $vserver->save(); break; } } } } } $output->writeln(sprintf("Hosting: %s has been synchronized", $hosting->id)); } catch (\Exception $ex) { if ($hosting) { $io->error("Hosting Id #{$hosting->id}, " . $ex->getMessage()); } else { $io->error($ex->getMessage()); } } (new Hypervisor($this->getName(), $input->getOptions())) ->ping(); } $output->writeln(""); $io->success([ sprintf("Synchronize migrate: %s Entries Processed.", $i), "Synchronize migrate: Done" ]); } }