AdditionalMountPointService.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. <?php
  2. namespace ModulesGarden\ProxmoxAddon\App\Services\Vps;
  3. use MGProvision\Proxmox\v2\models\MountPoint;
  4. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  5. use ModulesGarden\ProxmoxAddon\App\Services\Utility;
  6. use ModulesGarden\ProxmoxAddon\App\Enum\Vps\ConfigurableOption;
  7. use ModulesGarden\ProxmoxAddon\Core\UI\Traits\WhmcsParams;
  8. class AdditionalMountPointService
  9. {
  10. use WhmcsParams;
  11. use ApiService;
  12. use ProductService;
  13. public function hasMountPoint(){
  14. foreach ($this->vm()->getMounPoints()->fetch() as $mounPoint){
  15. if($mounPoint->isMaster()){
  16. continue;
  17. }
  18. return true;
  19. }
  20. return false;
  21. }
  22. public function create(){
  23. $size = $this->getSize();
  24. if(!$size || $size == "-1"){
  25. return;
  26. }
  27. $storage = $this->configuration()->getMountPointStorage();
  28. $mountPointRepository = $this->vm()->getMounPoints();
  29. $hdd = new MountPoint($mountPointRepository->nextId());
  30. $hdd->setLocation($storage . ":" . $size )
  31. ->setAcl($this->configuration()->getMountPointAcl() == "default" ? null : $this->configuration()->getMountPointAcl())
  32. ->setRo($this->configuration()->isMountPointRo() ? 1 : null)
  33. ->setQuota($this->configuration()->isMountPointQuota() ? 1 : null)
  34. ->setBackup(null)
  35. ->setReplicate($this->configuration()->isMountPointReplicate() ? '0' : null)
  36. ->setMp('/additional')
  37. ->setPath($this->vm()->getPath() . '/config')
  38. ->setApi($this->api())
  39. ->create();
  40. if($this->configuration()->isPermissionMountPointBackup()){
  41. $hdd->setBackup(1);
  42. }
  43. }
  44. private function getSize(){
  45. $diskSize = $this->configuration()->getAdditionalDiskSize();
  46. if ($this->isWhmcsConfigOption(ConfigurableOption::ADDITIONAL_DISKS_SIZE))
  47. {
  48. $diskSize = $this->getWhmcsConfigOption(ConfigurableOption::ADDITIONAL_DISKS_SIZE);
  49. Utility::unitFormat($diskSize, $this->configuration()->getAdditionalDiskUnit(), 'gb');
  50. }
  51. return $diskSize;
  52. }
  53. public function resize(){
  54. $diskSize = $this->getSize();
  55. if(!$diskSize || $diskSize == "-1" ){
  56. return;
  57. }
  58. foreach ($this->vm()->getMounPoints()->fetch() as $mounPoint){
  59. if($mounPoint->isMaster()){
  60. continue;
  61. }
  62. if((int)$mounPoint->getGb() == (int) $diskSize ){
  63. return true;
  64. }
  65. if((int)$mounPoint->getGb() > (int) $diskSize){
  66. throw new \InvalidArgumentException("Downgrading the mount point size is restricted");
  67. }
  68. $size = "+" . abs((int)$diskSize - (int)$mounPoint->getGb()) . "G";
  69. $mounPoint->resize($size);
  70. return true;
  71. }
  72. }
  73. }