WhmcsService.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528
  1. <?php
  2. namespace ModulesGarden\Servers\ProxmoxVps\App\Config\Packages;
  3. use MGProvision\Proxmox\v2\ProxmoxApiException;
  4. use MGProvision\Proxmox\v2\repository\ClusterResourcesRepository;
  5. use MGProvision\Proxmox\v2\repository\FileRepository;
  6. use MGProvision\Proxmox\v2\repository\StorageRepository;
  7. use ModulesGarden\ProxmoxAddon\App\Models\CloudInitScript;
  8. use ModulesGarden\ProxmoxAddon\App\Services\ApiService;
  9. use ModulesGarden\ProxmoxAddon\App\Services\Vps\ProductService;
  10. use ModulesGarden\Servers\ProxmoxVps\App\Libs\AwsIntegration\ClientWrapper;
  11. use ModulesGarden\Servers\ProxmoxVps\App\Models\AvailableImages\Repository;
  12. use ModulesGarden\Servers\ProxmoxVps\App\UI\Admin\ProductConfig\Providers\Config;
  13. use ModulesGarden\Servers\ProxmoxVps\Core\App\Packages\AppPackageConfiguration;
  14. use ModulesGarden\Servers\ProxmoxVps\Core\FileReader\Reader\Json;
  15. use ModulesGarden\Servers\ProxmoxVps\Core\ModuleConstants;
  16. use ModulesGarden\Servers\ProxmoxVps\Core\UI\Traits\RequestObjectHandler;
  17. use ModulesGarden\Servers\ProxmoxVps\Core\UI\Traits\WhmcsParams;
  18. use ModulesGarden\Servers\ProxmoxVps\Packages\WhmcsService\Config\Enum;
  19. class WhmcsService extends AppPackageConfiguration
  20. {
  21. use RequestObjectHandler;
  22. use WhmcsParams;
  23. use ProductService;
  24. use ApiService;
  25. const APP_CONFIGURATION =
  26. [
  27. self::PACKAGE_STATUS => self::PACKAGE_STATUS_ACTIVE,
  28. Enum::CUSTOM_FIELDS => [
  29. [
  30. Enum::FIELD_NAME => 'vmid|VMID',
  31. Enum::FIELD_TYPE => Enum::FIELD_TYPE_TEXT_BOX,
  32. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_ON
  33. ],
  34. [
  35. Enum::FIELD_NAME => 'node|Node',
  36. Enum::FIELD_TYPE => Enum::FIELD_TYPE_TEXT_BOX,
  37. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_ON
  38. ],
  39. [
  40. Enum::FIELD_NAME => 'VLAN Tag|VLAN Tag',
  41. Enum::FIELD_TYPE => Enum::FIELD_TYPE_TEXT_BOX,
  42. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_ON
  43. ],
  44. [
  45. Enum::FIELD_NAME => 'userName|Username',
  46. Enum::FIELD_TYPE => Enum::FIELD_TYPE_TEXT_BOX,
  47. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_ON
  48. ],
  49. [
  50. Enum::FIELD_NAME => 'ciuser|Cloud-Init User',
  51. Enum::FIELD_TYPE => Enum::FIELD_TYPE_TEXT_BOX,
  52. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_ON
  53. ],
  54. [
  55. Enum::FIELD_NAME => 'cipassword|Cloud-Init Password',
  56. Enum::FIELD_TYPE => Enum::FIELD_TYPE_PASSWORD,
  57. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_OFF,
  58. ],
  59. [
  60. Enum::FIELD_NAME => 'sshkeys|SSH Public Key',
  61. Enum::FIELD_TYPE => Enum::FIELD_TYPE_TEXTAREA,
  62. Enum::FIELD_ADMIN_ONLY => Enum::FIELD_ADMIN_ONLY_ON,
  63. Enum::FIELD_REG_EXPR => '#ssh-rsa AAAA[0-9A-Za-z+/]+[=]{0,3}( [^@]+@[^@]+)?#',
  64. Enum::FIELD_SHOW_ORDER => Enum::FIELD_SHOW_ORDER_ON,
  65. Enum::FIELD_DESCRIPTION => 'Enter your public key in the OpenSSH format here (e.g. ssh-rsa).'
  66. ]
  67. ],
  68. ];
  69. public function VMTemplateGetSubOptions()
  70. {
  71. $subOptions = [];
  72. try
  73. {
  74. //kvm
  75. if ($this->configuration()->isQemu())
  76. {
  77. $subOptions[] = [
  78. Enum::OPTION_SUB_NAME => '0|Disabled',
  79. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  80. ];
  81. $clusterResourcesRepository = new ClusterResourcesRepository();
  82. $clusterResourcesRepository->setApi($this->api());
  83. $clusterResourcesRepository->findKvmTemplate();
  84. $templates = [];
  85. foreach ($clusterResourcesRepository->fetch() as $resurce)
  86. {
  87. if (preg_match('/^custom[0-9]*/', $resurce->getName()))
  88. {
  89. continue;
  90. }
  91. if (in_array($resurce->getName(), $templates))
  92. {
  93. continue;
  94. }
  95. $subOptions[] = [
  96. Enum::OPTION_SUB_NAME => $resurce->getName() . '|' . $resurce->getName(),
  97. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  98. ];
  99. }
  100. unset($templates);
  101. }
  102. else
  103. {
  104. if ($this->configuration()->isLxc())
  105. { //lxc
  106. //node
  107. $node = $this->getDefaultNode();
  108. //storages
  109. $storageRepository = new StorageRepository();
  110. $storageRepository->findByNodes([$node->getNode()])
  111. ->findEnabed();
  112. //osTemplates
  113. $fileRepository = new FileRepository();
  114. $fileRepository->setApi($this->api());
  115. $fileRepository->findLxcTemplates();
  116. $fileRepository->findByNode($node);
  117. $fileRepository->findByStorages($storageRepository->fetchAsArray());
  118. foreach ($fileRepository->fetch() as $file)
  119. {
  120. $subOptions[] = [
  121. Enum::OPTION_SUB_NAME => $file->getVolid() . '|' . $file->getFriendlyName(),
  122. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  123. ];
  124. }
  125. }
  126. }
  127. }
  128. catch (ProxmoxApiException $ex)
  129. {
  130. return $subOptions;
  131. }
  132. return $subOptions;
  133. }
  134. public function NetworkRateGetSubOptions()
  135. {
  136. return [
  137. [
  138. Enum::OPTION_SUB_NAME => "0|Unlimited",
  139. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  140. ],
  141. [
  142. Enum::OPTION_SUB_NAME => '5|5 (MB/s) (' . (5 * 8) . ' Mbps)',
  143. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  144. ],
  145. [
  146. Enum::OPTION_SUB_NAME => '10|10 (MB/s) (' . (10 * 8) . ' Mbps)',
  147. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  148. ],
  149. [
  150. Enum::OPTION_SUB_NAME => '20|20 (MB/s) (' . (20 * 8) . ' Mbps)',
  151. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  152. ],
  153. [
  154. Enum::OPTION_SUB_NAME => '30|30 (MB/s) (' . (30 * 8) . ' Mbps)',
  155. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  156. ],
  157. [
  158. Enum::OPTION_SUB_NAME => '40|40 (MB/s) (' . (40 * 8) . ' Mbps)',
  159. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  160. ],
  161. [
  162. Enum::OPTION_SUB_NAME => '50|50 (MB/s) (' . (50 * 8) . ' Mbps)',
  163. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  164. ],
  165. ];
  166. }
  167. public function vcpusGetSubOptions()
  168. {
  169. return [
  170. [
  171. Enum::OPTION_SUB_NAME => "0|Unlimited",
  172. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  173. ],
  174. [
  175. Enum::OPTION_SUB_NAME => '1|1',
  176. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  177. ]
  178. ];
  179. }
  180. public function ISOImageGetSubOptions()
  181. {
  182. $subOptions = [
  183. [
  184. Enum::OPTION_SUB_NAME => 'none|None',
  185. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  186. ]
  187. ];
  188. try
  189. {
  190. //node
  191. $node = $this->getDefaultNode();
  192. //storages
  193. $storageRepository = new StorageRepository();
  194. $storageRepository->findByNodes([$node->getNode()])
  195. ->findEnabed();
  196. //file repository
  197. $fileRepository = new FileRepository();
  198. $fileRepository->setApi($this->api());
  199. $fileRepository->findIso();
  200. $fileRepository->findByNode($node);
  201. $fileRepository->findByStorages($storageRepository->fetchAsArray());
  202. foreach ($fileRepository->fetch() as $file)
  203. {
  204. $subOptions[] = [
  205. Enum::OPTION_SUB_NAME => $file->getVolid() . '|' . $file->getFriendlyName(),
  206. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  207. ];
  208. }
  209. }
  210. catch (ProxmoxApiException $ex)
  211. {
  212. return $subOptions;
  213. }
  214. return $subOptions;
  215. }
  216. public function osTypeGetSubOptions()
  217. {
  218. $subOptions = [];
  219. $ostype = new Json('ostype.json', ModuleConstants::getFullPathWhmcs('modules', 'addons', 'proxmoxAddon', 'storage', 'app'));
  220. foreach ($ostype->get() as $k => $ostype)
  221. {
  222. $subOptions[] = [
  223. Enum::OPTION_SUB_NAME => $k . '|' . $ostype,
  224. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  225. ];
  226. }
  227. return $subOptions;
  228. }
  229. public function getConfigurableOptions()
  230. {
  231. $configOptions = [];
  232. if ($this->configuration()->isQemu())
  233. {
  234. $configOptions[] = [
  235. Enum::OPTION_NAME => 'The number of CPU sockets|CPU Sockets',
  236. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  237. Enum::OPTION_QUANTITY_MIN => 1,
  238. Enum::OPTION_QUANTITY_MAX => 100,
  239. Enum::CONFIG_SUB_OPTIONS => [
  240. [
  241. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  242. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  243. ]
  244. ]
  245. ];
  246. $configOptions[] = [
  247. Enum::OPTION_NAME => 'The number of cores per socket|CPU Cores',
  248. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  249. Enum::OPTION_QUANTITY_MIN => 1,
  250. Enum::OPTION_QUANTITY_MAX => 10,
  251. Enum::CONFIG_SUB_OPTIONS => [
  252. [
  253. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  254. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  255. ]
  256. ]
  257. ];
  258. }
  259. if ($this->configuration()->isLxc())
  260. {
  261. $configOptions[] = [
  262. Enum::OPTION_NAME => 'cores|CPU Cores',
  263. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  264. Enum::OPTION_QUANTITY_MIN => 1,
  265. Enum::OPTION_QUANTITY_MAX => 10,
  266. Enum::CONFIG_SUB_OPTIONS => [
  267. [
  268. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  269. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  270. ]
  271. ]
  272. ];
  273. }
  274. $configOptions[] = [
  275. Enum::OPTION_NAME => 'cpulimit|Limit Of CPU',
  276. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  277. Enum::OPTION_QUANTITY_MIN => 0,
  278. Enum::OPTION_QUANTITY_MAX => 100,
  279. Enum::CONFIG_SUB_OPTIONS => [
  280. [
  281. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  282. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  283. ]
  284. ]
  285. ];
  286. $configOptions[] = [
  287. Enum::OPTION_NAME => 'CPU weight for a VM|CPU Weight For The VM',
  288. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  289. Enum::OPTION_QUANTITY_MIN => 1024,
  290. Enum::OPTION_QUANTITY_MAX => 99999,
  291. Enum::CONFIG_SUB_OPTIONS => [
  292. [
  293. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  294. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  295. ]
  296. ]
  297. ];
  298. $unit = strtoupper($this->configuration()->getMemoryUnit());
  299. $min = 128;
  300. $max = 1024 * 10;
  301. if ($this->configuration()->getMemoryUnit() == 'gb')
  302. {
  303. $min = 1;
  304. $max = 10;
  305. }
  306. $configOptions[] = [
  307. Enum::OPTION_NAME => 'Amount of RAM|Amount Of RAM',
  308. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  309. Enum::OPTION_QUANTITY_MIN => $min,
  310. Enum::OPTION_QUANTITY_MAX => $max,
  311. Enum::CONFIG_SUB_OPTIONS => [
  312. [
  313. Enum::OPTION_SUB_NAME => "{$unit}|{$unit}",
  314. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  315. ]
  316. ]
  317. ];
  318. if ($this->configuration()->isLxc())
  319. {
  320. $unit = strtoupper($this->configuration()->getSwapUnit());
  321. $min = 128;
  322. $max = 1024 * 10;
  323. if ($this->configuration()->getSwapUnit() == 'gb')
  324. {
  325. $min = 1;
  326. $max = 10;
  327. }
  328. $configOptions[] = [
  329. Enum::OPTION_NAME => 'Amount of SWAP|Amount Of SWAP',
  330. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  331. Enum::OPTION_QUANTITY_MIN => $min,
  332. Enum::OPTION_QUANTITY_MAX => $max,
  333. Enum::CONFIG_SUB_OPTIONS => [
  334. [
  335. Enum::OPTION_SUB_NAME => "{$unit}|{$unit}",
  336. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  337. ]
  338. ]
  339. ];
  340. }
  341. $unit = strtoupper($this->configuration()->getDiskUnit());
  342. $min = 128;
  343. $max = 1024 * 1000;
  344. if ($this->configuration()->getDiskUnit() == 'gb' || $this->configuration()->getDiskUnit() == 'tb')
  345. {
  346. $min = 1;
  347. $max = 1000;
  348. }
  349. $configOptions[] = [
  350. Enum::OPTION_NAME => 'Disk Space|Disk Space',
  351. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  352. Enum::OPTION_QUANTITY_MIN => $min,
  353. Enum::OPTION_QUANTITY_MAX => $max,
  354. Enum::CONFIG_SUB_OPTIONS => [
  355. [
  356. Enum::OPTION_SUB_NAME => "{$unit}|{$unit}",
  357. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  358. ]
  359. ]
  360. ];
  361. $unit = strtoupper($this->configuration()->getAdditionalDiskUnit());
  362. $max = 1024 * 1000;
  363. if ($this->configuration()->getAdditionalDiskUnit() == 'gb' || $this->configuration()->getAdditionalDiskUnit() == 'tb')
  364. {
  365. $max = 1000;
  366. }
  367. $configOptions[] = [
  368. Enum::OPTION_NAME => 'additionalDisksSpace|Additional Disks Space',
  369. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  370. Enum::OPTION_QUANTITY_MIN => 0,
  371. Enum::OPTION_QUANTITY_MAX => $max,
  372. Enum::CONFIG_SUB_OPTIONS => [
  373. [
  374. Enum::OPTION_SUB_NAME => "{$unit}|{$unit}",
  375. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  376. ]
  377. ]
  378. ];
  379. $configOptions[] = [
  380. Enum::OPTION_NAME => 'IP Addresses|IPv4 Addresses',
  381. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  382. Enum::OPTION_QUANTITY_MIN => 0,
  383. Enum::OPTION_QUANTITY_MAX => 100,
  384. Enum::CONFIG_SUB_OPTIONS => [
  385. [
  386. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  387. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  388. ]
  389. ]
  390. ];
  391. $configOptions[] = [
  392. Enum::OPTION_NAME => 'IPv6 Addresses|IPv6 Addresses',
  393. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  394. Enum::OPTION_QUANTITY_MIN => 0,
  395. Enum::OPTION_QUANTITY_MAX => 100,
  396. Enum::CONFIG_SUB_OPTIONS => [
  397. [
  398. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  399. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  400. ]
  401. ]
  402. ];
  403. $configOptions[] = [
  404. Enum::OPTION_NAME => 'Backups Limit|Backups Size',
  405. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  406. Enum::OPTION_QUANTITY_MIN => 0,
  407. Enum::OPTION_QUANTITY_MAX => 10 * 100,
  408. Enum::CONFIG_SUB_OPTIONS => [
  409. [
  410. Enum::OPTION_SUB_NAME => 'GB|GB',
  411. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  412. ]
  413. ]
  414. ];
  415. $configOptions[] = [
  416. Enum::OPTION_NAME => 'Backups Files Limit|Backup Files',
  417. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  418. Enum::OPTION_QUANTITY_MIN => 0,
  419. Enum::OPTION_QUANTITY_MAX => 100,
  420. Enum::CONFIG_SUB_OPTIONS => [
  421. [
  422. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  423. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  424. ]
  425. ]
  426. ];
  427. $configOptions[] = [
  428. Enum::OPTION_NAME => 'snapshots|Snapshots',
  429. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  430. Enum::OPTION_QUANTITY_MIN => 0,
  431. Enum::OPTION_QUANTITY_MAX => 100,
  432. Enum::CONFIG_SUB_OPTIONS => [
  433. [
  434. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  435. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  436. ]
  437. ]
  438. ];
  439. $configOptions[] = [
  440. Enum::OPTION_NAME => 'snapshotJobs|Snapshot Jobs',
  441. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  442. Enum::OPTION_QUANTITY_MIN => 0,
  443. Enum::OPTION_QUANTITY_MAX => 100,
  444. Enum::CONFIG_SUB_OPTIONS => [
  445. [
  446. Enum::OPTION_SUB_NAME => 'Unit|Unit',
  447. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  448. ]
  449. ]
  450. ];
  451. $configOptions[] = [
  452. Enum::OPTION_NAME => 'Bandwidth|Bandwidth',
  453. Enum::OPTION_TYPE => Enum::OPTION_TYPE_QUANTITY,
  454. Enum::OPTION_QUANTITY_MIN => 0,
  455. Enum::OPTION_QUANTITY_MAX => 10 * 100,
  456. Enum::CONFIG_SUB_OPTIONS => [
  457. [
  458. Enum::OPTION_SUB_NAME => 'GB|GB',
  459. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  460. ]
  461. ]
  462. ];
  463. $configOptions[] = [
  464. Enum::OPTION_NAME => 'VM Template|VM Template',
  465. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  466. ];
  467. $configOptions[] = [
  468. Enum::OPTION_NAME => 'Network Rate|Network Rate',
  469. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  470. ];
  471. if ($this->configuration()->isQemu())
  472. {
  473. $configOptions[] = [
  474. Enum::OPTION_NAME => 'vcpus|VCPUs',
  475. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  476. ];
  477. $configOptions[] = [
  478. Enum::OPTION_NAME => 'ISO Image|ISO Image',
  479. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  480. ];
  481. $configOptions[] = [
  482. Enum::OPTION_NAME => 'osType|OS Type',
  483. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  484. ];
  485. $configOptions[] = [
  486. Enum::OPTION_NAME => 'cicustom|Custom Cloud-Init Configuration',
  487. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  488. ];
  489. $configOptions[] = [
  490. Enum::OPTION_NAME => 'ciscript|Cloud-Init Script',
  491. Enum::OPTION_TYPE => Enum::OPTION_TYPE_DROPDOWN,
  492. ];
  493. }
  494. return $configOptions;
  495. }
  496. public function cloudInitScriptGetSubOptions()
  497. {
  498. $subOptions = [];
  499. //kvm
  500. if ($this->configuration()->isQemu())
  501. {
  502. $subOptions[] = [
  503. Enum::OPTION_SUB_NAME => '0|Disabled',
  504. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  505. ];
  506. foreach (CloudInitScript::get() as $item){
  507. $subOptions[] = [
  508. Enum::OPTION_SUB_NAME => $item->id . '|' . $item->name,
  509. Enum::OPTION_SUB_ORDER => Enum::OPTION_SUB_ORDER_DEFAULT,
  510. ];
  511. }
  512. }
  513. return $subOptions;
  514. }
  515. }