index.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627
  1. import status from '@/locales/zh-CN'
  2. import { PROVIDER_MAP } from '@/constants'
  3. import i18n from '@/locales'
  4. import { DISK_TYPES, ALL_STORAGE_LABEL } from '../../../constants'
  5. const { disk: diskStatus, server: serverStatus } = status.status
  6. const _tran = (enArr, status = diskStatus, res = 'disk') => {
  7. return enArr.map(v => status[v] ? i18n.t(`status.${res}.${v}`) : v).filter(v => v).join(',')
  8. }
  9. const _tran2 = (enArr, status = diskStatus) => {
  10. return enArr.map(v => status[v] || v).filter(v => v).join(',')
  11. }
  12. // 磁盘扩容的逻辑梳理
  13. export const diskResizeConfig = {
  14. base (obj) {
  15. const status = ['ready']
  16. const validate = status.includes(obj.status)
  17. return {
  18. validate,
  19. tooltip: validate ? '' : i18n.t('compute.text_465', [_tran(status)]),
  20. }
  21. },
  22. vmware (obj) {
  23. const { validate, tooltip } = diskResizeConfig.base(obj)
  24. if (!validate) {
  25. return {
  26. validate: false,
  27. tooltip,
  28. }
  29. }
  30. if (obj.disk_type === 'data') { // 数据盘
  31. const validate = obj.guest_status === 'ready' || obj.guest_status === 'running' // 开关机可以扩容
  32. const tooltip = validate ? '' : i18n.t('compute.text_1349', [_tran(['ready', 'running'], serverStatus, 'server')])
  33. return {
  34. validate,
  35. tooltip,
  36. }
  37. } else { // 系统盘
  38. const validate = obj.guest_status === 'ready' || obj.guest_status === 'running' // 开关机可以扩容
  39. const tooltip = validate ? '' : i18n.t('compute.text_1349', [_tran(['running'], serverStatus, 'server')])
  40. return {
  41. validate,
  42. tooltip,
  43. }
  44. }
  45. },
  46. onecloud (obj) {
  47. const diskType = 'data'
  48. const provider = obj.provider
  49. const { validate, tooltip } = diskResizeConfig.base(obj)
  50. if (!validate) {
  51. return {
  52. validate: false,
  53. tooltip,
  54. }
  55. }
  56. if (obj.guest_status === 'running' && obj.disk_type !== diskType) {
  57. return {
  58. validate: false,
  59. tooltip: i18n.t('compute.text_467', [PROVIDER_MAP[provider].label]),
  60. }
  61. }
  62. return {
  63. validate: true,
  64. tooltip: '',
  65. }
  66. },
  67. openstack (obj) {
  68. const diskType = 'data'
  69. const provider = obj.provider
  70. const { validate, tooltip } = diskResizeConfig.base(obj)
  71. if (!validate) {
  72. return {
  73. validate: false,
  74. tooltip,
  75. }
  76. }
  77. if (obj.guest_status === 'running') {
  78. return {
  79. validate: false,
  80. tooltip: i18n.t('compute.text_468', [PROVIDER_MAP[provider].label]),
  81. }
  82. }
  83. if (obj.disk_type !== diskType) {
  84. return {
  85. validate: false,
  86. tooltip: i18n.t('compute.text_466', [PROVIDER_MAP[provider].label, DISK_TYPES[diskType]]),
  87. }
  88. }
  89. return {
  90. validate: true,
  91. tooltip: '',
  92. }
  93. },
  94. zstack (obj) {
  95. const guestStatus = ['ready', 'running']
  96. const provider = obj.provider
  97. const { validate, tooltip } = diskResizeConfig.base(obj)
  98. if (!validate) {
  99. return {
  100. validate: false,
  101. tooltip,
  102. }
  103. }
  104. if (!guestStatus.includes(obj.guest_status)) {
  105. return {
  106. validate: false,
  107. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  108. }
  109. }
  110. return {
  111. validate: true,
  112. tooltip: '',
  113. }
  114. },
  115. dstack (obj) {
  116. const guestStatus = ['ready', 'running']
  117. const provider = obj.provider
  118. const { validate, tooltip } = diskResizeConfig.base(obj)
  119. if (!validate) {
  120. return {
  121. validate: false,
  122. tooltip,
  123. }
  124. }
  125. if (!guestStatus.includes(obj.guest_status)) {
  126. return {
  127. validate: false,
  128. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  129. }
  130. }
  131. return {
  132. validate: true,
  133. tooltip: '',
  134. }
  135. },
  136. aliyun (obj) {
  137. const provider = obj.provider
  138. const diskType = 'data'
  139. const { validate, tooltip } = diskResizeConfig.base(obj)
  140. if (!validate) {
  141. return {
  142. validate: false,
  143. tooltip,
  144. }
  145. }
  146. if (obj.disk_type !== diskType) {
  147. return {
  148. validate: false,
  149. tooltip: i18n.t('compute.text_466', [PROVIDER_MAP[provider].label, DISK_TYPES[diskType]]),
  150. }
  151. }
  152. return {
  153. validate: true,
  154. tooltip: '',
  155. }
  156. },
  157. qcloud (obj) {
  158. const provider = obj.provider
  159. const guestStatus = ['ready', 'running']
  160. const diskType = 'data'
  161. const notInStorageType = ['local_basic', 'local_ssd']
  162. const { validate, tooltip } = diskResizeConfig.base(obj)
  163. if (!validate) {
  164. return {
  165. validate: false,
  166. tooltip,
  167. }
  168. }
  169. if (!guestStatus.includes(obj.guest_status)) {
  170. return {
  171. validate: false,
  172. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  173. }
  174. }
  175. if (obj.disk_type !== diskType) {
  176. return {
  177. validate: false,
  178. tooltip: i18n.t('compute.text_466', [PROVIDER_MAP[provider].label, DISK_TYPES[diskType]]),
  179. }
  180. }
  181. if (notInStorageType.includes(obj.storage_type)) {
  182. return {
  183. validate: false,
  184. tooltip: i18n.t('compute.text_471', [PROVIDER_MAP[provider].label, _tran2(notInStorageType, ALL_STORAGE_LABEL)]),
  185. }
  186. }
  187. return {
  188. validate: true,
  189. tooltip: '',
  190. }
  191. },
  192. aws (obj) {
  193. const { validate, tooltip } = diskResizeConfig.base(obj)
  194. if (!validate) {
  195. return {
  196. validate: false,
  197. tooltip,
  198. }
  199. }
  200. return {
  201. validate: true,
  202. tooltip: '',
  203. }
  204. },
  205. huawei (obj) {
  206. const { validate, tooltip } = diskResizeConfig.base(obj)
  207. if (!validate) {
  208. return {
  209. validate: false,
  210. tooltip,
  211. }
  212. }
  213. return {
  214. validate: true,
  215. tooltip: '',
  216. }
  217. },
  218. azure (obj) {
  219. const provider = obj.provider
  220. const guestStatus = ['ready']
  221. const { validate, tooltip } = diskResizeConfig.base(obj)
  222. if (!validate) {
  223. return {
  224. validate: false,
  225. tooltip,
  226. }
  227. }
  228. const azureValid = guestStatus.includes(obj.guest_status)
  229. return {
  230. validate: azureValid,
  231. tooltip: azureValid ? '' : i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  232. }
  233. },
  234. ucloud (obj) {
  235. const diskType = 'data'
  236. const provider = obj.provider
  237. const { validate, tooltip } = diskResizeConfig.base(obj)
  238. if (!validate) {
  239. return {
  240. validate: false,
  241. tooltip,
  242. }
  243. }
  244. if (obj.disk_type !== diskType) {
  245. return {
  246. validate: false,
  247. tooltip: i18n.t('compute.text_466', [PROVIDER_MAP[provider].label, DISK_TYPES[diskType]]),
  248. }
  249. }
  250. if (obj.guest) {
  251. return {
  252. validate: false,
  253. tooltip: i18n.t('compute.text_472'),
  254. }
  255. }
  256. return {
  257. validate: true,
  258. tooltip: '',
  259. }
  260. },
  261. google (obj) {
  262. const { validate, tooltip } = diskResizeConfig.base(obj)
  263. if (!validate) {
  264. return {
  265. validate: false,
  266. tooltip,
  267. }
  268. }
  269. return {
  270. validate: true,
  271. tooltip: '',
  272. }
  273. },
  274. ctyun (obj) {
  275. const { validate, tooltip } = diskResizeConfig.base(obj)
  276. if (!validate) {
  277. return {
  278. validate: false,
  279. tooltip,
  280. }
  281. }
  282. return {
  283. validate: true,
  284. tooltip: '',
  285. }
  286. },
  287. volcengine (obj) {
  288. const { validate, tooltip } = diskResizeConfig.base(obj)
  289. if (!validate) {
  290. return {
  291. validate: false,
  292. tooltip,
  293. }
  294. }
  295. if (obj.disk_type === 'data') { // 数据盘
  296. const validate = obj.guest_status === 'ready' || obj.guest_status === 'running' // 关机可以扩容
  297. const tooltip = validate ? '' : i18n.t('compute.volcengine.data_disk_resize_tip', [_tran(['ready', 'running'], serverStatus, 'server')])
  298. return {
  299. validate,
  300. tooltip,
  301. }
  302. } else { // 系统盘
  303. const validate = obj.guest_status === 'ready' // 关机可以扩容
  304. const tooltip = validate ? '' : i18n.t('compute.volcengine.sys_disk_resize_tip', [_tran(['ready'], serverStatus, 'server')])
  305. return {
  306. validate,
  307. tooltip,
  308. }
  309. }
  310. },
  311. zettakit (obj) {
  312. const { validate, tooltip } = diskResizeConfig.base(obj)
  313. if (!validate) {
  314. return {
  315. validate: false,
  316. tooltip,
  317. }
  318. }
  319. if (obj.disk_type === 'data') { // 数据盘
  320. const validate = obj.guest_status === 'ready' || obj.guest_status === 'running' // 开关机可以扩容
  321. const tooltip = validate ? '' : i18n.t('compute.zettakit.data_disk_resize_tip', [_tran(['ready', 'running'], serverStatus, 'server')])
  322. return {
  323. validate,
  324. tooltip,
  325. }
  326. } else { // 系统盘
  327. const validate = obj.guest_status === 'ready' // 关机可以扩容
  328. const tooltip = validate ? '' : i18n.t('compute.zettakit.sys_disk_resize_tip', [_tran(['ready'], serverStatus, 'server')])
  329. return {
  330. validate,
  331. tooltip,
  332. }
  333. }
  334. },
  335. uis (obj) {
  336. const { validate, tooltip } = diskResizeConfig.base(obj)
  337. if (!validate) {
  338. return {
  339. validate: false,
  340. tooltip,
  341. }
  342. }
  343. if (obj.disk_type === 'data') { // 数据盘
  344. const validate = obj.guest_status === 'ready' || obj.guest_status === 'running' // 开关机可以扩容
  345. const tooltip = validate ? '' : i18n.t('compute.uis.data_disk_resize_tip', [_tran(['ready', 'running'], serverStatus, 'server')])
  346. return {
  347. validate,
  348. tooltip,
  349. }
  350. } else { // 系统盘
  351. const validate = obj.guest_status === 'ready' // 关机可以扩容
  352. const tooltip = validate ? '' : i18n.t('compute.uis.sys_disk_resize_tip', [_tran(['ready'], serverStatus, 'server')])
  353. return {
  354. validate,
  355. tooltip,
  356. }
  357. }
  358. },
  359. }
  360. // 磁盘新建快照的逻辑梳理
  361. export const diskCreateSnapshotConfig = {
  362. vmware (obj) {
  363. const provider = obj.provider
  364. return {
  365. validate: false,
  366. tooltip: i18n.t('compute.text_473', [PROVIDER_MAP[provider].label]),
  367. }
  368. },
  369. onecloud (obj) {
  370. const provider = obj.provider
  371. const guestStatus = ['ready', 'running']
  372. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  373. return {
  374. validate: false,
  375. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  376. }
  377. }
  378. if (!obj.guest && obj.storage_type === 'local') {
  379. return {
  380. validate: false,
  381. tooltip: '',
  382. }
  383. }
  384. return {
  385. validate: true,
  386. tooltip: '',
  387. }
  388. },
  389. openstack (obj) {
  390. const guestStatus = ['ready', 'running']
  391. const provider = obj.provider
  392. if (obj.storage_type === 'nova') {
  393. return {
  394. validate: false,
  395. tooltip: i18n.t('compute.text_475', [PROVIDER_MAP[provider].label]),
  396. }
  397. }
  398. if (obj.guest_status && !guestStatus.includes(obj.guest_status)) {
  399. return {
  400. validate: false,
  401. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  402. }
  403. }
  404. return {
  405. validate: true,
  406. tooltip: '',
  407. }
  408. },
  409. zstack (obj) {
  410. const guestStatus = ['ready', 'running']
  411. const provider = obj.provider
  412. if (!guestStatus.includes(obj.guest_status)) {
  413. return {
  414. validate: false,
  415. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  416. }
  417. }
  418. return {
  419. validate: true,
  420. tooltip: '',
  421. }
  422. },
  423. dstack (obj) {
  424. const guestStatus = ['ready', 'running']
  425. const provider = obj.provider
  426. if (!guestStatus.includes(obj.guest_status)) {
  427. return {
  428. validate: false,
  429. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  430. }
  431. }
  432. return {
  433. validate: true,
  434. tooltip: '',
  435. }
  436. },
  437. aliyun (obj) {
  438. const guestStatus = ['ready', 'running']
  439. const provider = obj.provider
  440. if (!guestStatus.includes(obj.guest_status)) {
  441. return {
  442. validate: false,
  443. tooltip: i18n.t('compute.text_469', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  444. }
  445. }
  446. return {
  447. validate: true,
  448. tooltip: '',
  449. }
  450. },
  451. qcloud (obj) {
  452. const provider = obj.provider
  453. const guestStatus = ['ready', 'running']
  454. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  455. return {
  456. validate: false,
  457. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  458. }
  459. }
  460. return {
  461. validate: true,
  462. tooltip: '',
  463. }
  464. },
  465. aws (obj) {
  466. const provider = obj.provider
  467. const guestStatus = ['ready', 'running']
  468. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  469. return {
  470. validate: false,
  471. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  472. }
  473. }
  474. return {
  475. validate: true,
  476. tooltip: '',
  477. }
  478. },
  479. huawei (obj) {
  480. const provider = obj.provider
  481. const guestStatus = ['ready', 'running']
  482. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  483. return {
  484. validate: false,
  485. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  486. }
  487. }
  488. return {
  489. validate: true,
  490. tooltip: '',
  491. }
  492. },
  493. azure (obj) {
  494. const provider = obj.provider
  495. const guestStatus = ['ready', 'running']
  496. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  497. return {
  498. validate: false,
  499. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  500. }
  501. }
  502. return {
  503. validate: true,
  504. tooltip: '',
  505. }
  506. },
  507. ucloud (obj) {
  508. const diskType = 'data'
  509. const provider = obj.provider
  510. const notInStorageType = ['CLOUD_NORMAL']
  511. if (notInStorageType.includes(obj.storage_type)) {
  512. return {
  513. validate: false,
  514. tooltip: i18n.t('compute.text_471', [PROVIDER_MAP[provider].label, _tran2(notInStorageType, ALL_STORAGE_LABEL)]),
  515. }
  516. }
  517. if (obj.disk_type !== diskType) {
  518. return {
  519. validate: false,
  520. tooltip: i18n.t('compute.text_466', [PROVIDER_MAP[provider].label, DISK_TYPES[obj.disk_type]]),
  521. }
  522. }
  523. return {
  524. validate: true,
  525. tooltip: '',
  526. }
  527. },
  528. google (obj) {
  529. const provider = obj.provider
  530. const guestStatus = ['ready', 'running']
  531. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  532. return {
  533. validate: false,
  534. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  535. }
  536. }
  537. return {
  538. validate: true,
  539. tooltip: '',
  540. }
  541. },
  542. ctyun (obj) {
  543. const provider = obj.provider
  544. const guestStatus = ['ready', 'running']
  545. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  546. return {
  547. validate: false,
  548. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  549. }
  550. }
  551. return {
  552. validate: false,
  553. tooltip: i18n.t('compute.text_476'),
  554. }
  555. },
  556. hcso (obj) {
  557. const provider = obj.provider
  558. const guestStatus = ['ready', 'running']
  559. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  560. return {
  561. validate: false,
  562. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  563. }
  564. }
  565. return {
  566. validate: true,
  567. tooltip: '',
  568. }
  569. },
  570. hcs (obj) {
  571. const provider = obj.provider
  572. const guestStatus = ['ready', 'running']
  573. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  574. return {
  575. validate: false,
  576. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  577. }
  578. }
  579. return {
  580. validate: true,
  581. tooltip: '',
  582. }
  583. },
  584. ksyun (obj) {
  585. const provider = obj.provider
  586. const guestStatus = ['ready', 'running']
  587. if (obj.guest && !guestStatus.includes(obj.guest_status)) {
  588. return {
  589. validate: false,
  590. tooltip: i18n.t('compute.text_474', [PROVIDER_MAP[provider].label, _tran(guestStatus, serverStatus, 'server')]),
  591. }
  592. }
  593. return {
  594. validate: true,
  595. tooltip: '',
  596. }
  597. },
  598. bingocloud (obj) {
  599. return {
  600. validate: false,
  601. }
  602. },
  603. volcengine (obj) {
  604. return {
  605. validate: true,
  606. tooltip: '',
  607. }
  608. },
  609. sangfor (obj) {
  610. return {
  611. validate: false,
  612. }
  613. },
  614. }