AdditionalDiskService.php 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\App\Services\Cloud;
  3. use MGProvision\Proxmox\v2\models\HardDisk;
  4. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  5. use ModulesGarden\ProxmoxAddon\App\Services\Utility;
  6. use ModulesGarden\ProxmoxAddon\Core\UI\Traits\WhmcsParams;
  7. use function ModulesGarden\ProxmoxAddon\Core\Helper\sl;
  8. class AdditionalDiskService
  9. {
  10. use WhmcsParams;
  11. use ApiService;
  12. use ProductService;
  13. public function hasDisk(){
  14. foreach (sl('Vm')->getVm()->getHardDisks() as $hardDisk)
  15. {
  16. if (!$hardDisk->isMaster())
  17. {
  18. return true;
  19. }
  20. }
  21. return false;
  22. }
  23. public function create($config){
  24. for ($i=1; $i<=10; $i++){
  25. $diskSize = (int) $config['additionalDiskSize'.$i];
  26. if(!$diskSize){
  27. continue;
  28. }
  29. $type = $config['additionalDiskBus'.$i];
  30. $bus = sl('Vm')->getVm()->findFreeDeviceId($type);
  31. $harDisk = new HardDisk($type . $bus);
  32. $harDisk->setSize($diskSize)
  33. ->setApi($this->api())
  34. ->setPath(sl('Vm')->getVm()->getPath() . "/config")
  35. ->setMedia("disk")
  36. ->setBackup( $config['additionalDiskBackup'.$i]== "on" ? null : 0)
  37. ->setStorage($this->configuration()->getAdditionalDiskStorage())
  38. ->setCache($this->configuration()->getAdditionalDiskCache())
  39. ->setFormat($config['additionalDiskFormat'.$i])
  40. ->setMbps_rd($this->configuration()->getAdditionalDiskMbpsRd())
  41. ->setMbps_wr($this->configuration()->getAdditionalDiskMbpsRd())
  42. ->setDiscard($this->configuration()->isAdditionalDiskDiscard() ? "on" : null)
  43. ->setIops_rd($this->configuration()->getAdditionalDiskIopsRd())
  44. ->setIops_rd_max($this->configuration()->getAdditionalDiskIopsRdMax())
  45. ->setIops_wr($this->configuration()->getAdditionalDiskIopsWr())
  46. ->setIops_wr_max($this->configuration()->getAdditionalDiskIopsWrMax())
  47. ->setReplicate($this->configuration()->isAdditionalDiskReplicate() ? 0 : null);
  48. if ($this->configuration()->isAdditionalDiskIoThread() && in_array($type, ['virtio', 'scsi']))
  49. {
  50. $harDisk->setIothread(1);
  51. }
  52. $harDisk->create();
  53. }
  54. }
  55. }