hostActions.js 7.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. import { commonUnabled } from '../views/vminstance/utils'
  2. import i18n from '@/locales'
  3. export function hostCommonActions (hostList) {
  4. return [
  5. {
  6. label: hostList.$t('compute.text_272'),
  7. permission: 'hosts_perform_start',
  8. action: (obj) => {
  9. hostList.list.batchPerformAction('start', null, hostList.list.steadyStatus)
  10. },
  11. meta: () => {
  12. if (hostList.list.selectedItems.length <= 0) {
  13. return {
  14. validate: false,
  15. tooltip: hostList.$t('compute.text_823'),
  16. }
  17. }
  18. for (let i = 0; i < hostList.list.selectedItems.length; i++) {
  19. const obj = hostList.list.selectedItems[i]
  20. if (!obj.is_baremetal) {
  21. return {
  22. validate: false,
  23. tooltip: hostList.$t('compute.text_823'),
  24. }
  25. }
  26. if (obj.server_id && obj.host_type === 'baremetal') {
  27. return {
  28. validate: false,
  29. }
  30. }
  31. if (obj.status !== 'ready') {
  32. return {
  33. validate: false,
  34. tooltip: hostList.$t('compute.text_823'),
  35. }
  36. }
  37. }
  38. return {
  39. validate: true,
  40. }
  41. },
  42. },
  43. {
  44. label: hostList.$t('compute.text_273'),
  45. permission: 'hosts_perform_stop',
  46. action: (obj) => {
  47. hostList.list.batchPerformAction('stop', null, hostList.list.steadyStatus)
  48. },
  49. meta: () => {
  50. if (hostList.list.selectedItems.length <= 0) {
  51. return {
  52. validate: false,
  53. tooltip: hostList.$t('compute.text_824'),
  54. }
  55. }
  56. for (let i = 0; i < hostList.list.selectedItems.length; i++) {
  57. const obj = hostList.list.selectedItems[i]
  58. if (!obj.is_baremetal) {
  59. return {
  60. validate: false,
  61. tooltip: hostList.$t('compute.text_824'),
  62. }
  63. }
  64. if (obj.server_id && obj.host_type === 'baremetal') {
  65. return {
  66. validate: false,
  67. }
  68. }
  69. if (obj.status !== 'running') {
  70. return {
  71. validate: false,
  72. tooltip: hostList.$t('compute.text_824'),
  73. }
  74. }
  75. }
  76. return {
  77. validate: true,
  78. }
  79. },
  80. },
  81. {
  82. label: hostList.$t('compute.text_274'),
  83. permission: 'hosts_perform_reset',
  84. action: (obj) => {
  85. hostList.list.batchPerformAction('reset', null, hostList.list.steadyStatus)
  86. },
  87. meta: () => {
  88. if (hostList.list.selectedItems.length <= 0) {
  89. return {
  90. validate: false,
  91. tooltip: hostList.$t('compute.text_824'),
  92. }
  93. }
  94. for (let i = 0; i < hostList.list.selectedItems.length; i++) {
  95. const obj = hostList.list.selectedItems[i]
  96. if (!obj.is_baremetal) {
  97. return {
  98. validate: false,
  99. tooltip: hostList.$t('compute.text_824'),
  100. }
  101. }
  102. if (obj.server_id && obj.host_type === 'baremetal') {
  103. return {
  104. validate: false,
  105. }
  106. }
  107. if (obj.status !== 'running') {
  108. return {
  109. validate: false,
  110. tooltip: hostList.$t('compute.text_824'),
  111. }
  112. }
  113. }
  114. return {
  115. validate: true,
  116. }
  117. },
  118. },
  119. {
  120. label: hostList.$t('compute.text_550'),
  121. permission: 'hosts_perform_maintenance',
  122. action: () => {
  123. hostList.list.batchPerformAction('maintenance', null, hostList.list.steadyStatus)
  124. },
  125. meta: () => {
  126. if (hostList.list.selectedItems.length <= 0) {
  127. return {
  128. validate: false,
  129. }
  130. }
  131. for (let i = 0; i < hostList.list.selectedItems.length; i++) {
  132. const obj = hostList.list.selectedItems[i]
  133. if (obj.server) {
  134. return {
  135. validate: false,
  136. }
  137. }
  138. if (!obj.is_baremetal) {
  139. return {
  140. validate: false,
  141. }
  142. }
  143. if (!obj.server_id) {
  144. return {
  145. validate: false,
  146. }
  147. }
  148. if (obj.is_maintenance) {
  149. return {
  150. validate: false,
  151. }
  152. }
  153. if (['running', 'ready'].indexOf(obj.status) < 0) {
  154. return {
  155. validate: false,
  156. }
  157. }
  158. }
  159. return {
  160. validate: true,
  161. }
  162. },
  163. },
  164. {
  165. label: hostList.$t('compute.text_559'),
  166. permission: 'hosts_perform_unmaintenance',
  167. action: () => {
  168. hostList.list.batchPerformAction('unmaintenance', null, hostList.list.steadyStatus)
  169. },
  170. meta: () => {
  171. if (hostList.list.selectedItems.length <= 0) {
  172. return {
  173. validate: false,
  174. }
  175. }
  176. for (let i = 0; i < hostList.list.selectedItems.length; i++) {
  177. const obj = hostList.list.selectedItems[i]
  178. if (obj.server) {
  179. return {
  180. validate: false,
  181. }
  182. }
  183. if (!obj.is_baremetal) {
  184. return {
  185. validate: false,
  186. }
  187. }
  188. if (!obj.server_id) {
  189. return {
  190. validate: false,
  191. }
  192. }
  193. if (!obj.is_maintenance) {
  194. return {
  195. validate: false,
  196. }
  197. }
  198. if (['running', 'ready'].indexOf(obj.status) < 0) {
  199. return {
  200. validate: false,
  201. }
  202. }
  203. }
  204. return {
  205. validate: true,
  206. }
  207. },
  208. },
  209. {
  210. label: hostList.$t('compute.perform_sync_status'),
  211. permission: 'hosts_perform_syncstatus',
  212. action: () => {
  213. hostList.list.batchPerformAction('syncstatus', null, hostList.list.steadyStatus)
  214. },
  215. meta: () => {
  216. if (hostList.list.selectedItems.length <= 0) {
  217. return {
  218. validate: false,
  219. }
  220. }
  221. for (let i = 0; i < hostList.list.selectedItems.length; i++) {
  222. const obj = hostList.list.selectedItems[i]
  223. if (!obj.is_baremetal) {
  224. return {
  225. validate: false,
  226. }
  227. }
  228. }
  229. return {
  230. validate: true,
  231. }
  232. },
  233. },
  234. ]
  235. }
  236. export function hostServerActions (manager, obj, objList, isHostServer) {
  237. return [
  238. {
  239. label: i18n.t('compute.text_272'),
  240. permission: 'server_perform_start',
  241. action: () => {
  242. manager('performAction', {
  243. steadyStatus: 'running',
  244. id: isHostServer ? obj.server_id : obj.id,
  245. managerArgs: {
  246. action: 'start',
  247. },
  248. })
  249. },
  250. meta: () => {
  251. return {
  252. validate: obj.status === 'ready' && !commonUnabled(obj),
  253. }
  254. },
  255. },
  256. {
  257. label: i18n.t('compute.text_273'),
  258. permission: 'server_perform_stop',
  259. action: () => {
  260. objList.createDialog('VmShutDownDialog', {
  261. data: [obj],
  262. columns: objList.columns,
  263. onManager: manager,
  264. isHostServer: isHostServer,
  265. })
  266. },
  267. meta: () => {
  268. return {
  269. validate: obj.status === 'running' && !commonUnabled(obj),
  270. }
  271. },
  272. },
  273. {
  274. label: i18n.t('compute.text_274'),
  275. permission: 'server_perform_restart',
  276. action: () => {
  277. objList.createDialog('VmRestartDialog', {
  278. data: [obj],
  279. columns: objList.columns,
  280. onManager: manager,
  281. isHostServer: isHostServer,
  282. })
  283. },
  284. meta: () => {
  285. return {
  286. validate: (obj.status === 'running' || obj.status === 'stop_fail') && !commonUnabled(obj),
  287. }
  288. },
  289. },
  290. ]
  291. }