From b0852ba4da1874dff6ebab0439b86eb0b9e5181e Mon Sep 17 00:00:00 2001 From: Bo Date: Mon, 4 Sep 2023 16:40:47 +0800 Subject: [PATCH 1/2] feat: Add guest rescue control. --- containers/Compute/locales/en.json | 4 +- containers/Compute/locales/zh-CN.json | 4 +- .../views/vminstance/constants/actions.js | 32 +++++++++++ .../dialogs/VmStartRescueDialog.vue | 57 +++++++++++++++++++ .../vminstance/dialogs/VmStopRescueDialog.vue | 57 +++++++++++++++++++ containers/Compute/views/vminstance/utils.js | 13 +++++ src/constants/permission.js | 2 + 7 files changed, 167 insertions(+), 2 deletions(-) create mode 100644 containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue create mode 100644 containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue diff --git a/containers/Compute/locales/en.json b/containers/Compute/locales/en.json index 2edb402e9b..5560c3d2d8 100644 --- a/containers/Compute/locales/en.json +++ b/containers/Compute/locales/en.json @@ -1708,5 +1708,7 @@ "compute.storage.check_status.host_status": "Host service or status is abnormal", "compute.vmware.transfer.message": "Prompt message: The migration host must belong to the same Layer 2 network and the target host must be in normal state", "compute.storage.check_status.status": "The block storage status is abnormal", - "compute.storage.check_status.enabled": "Block storage is not enabled" + "compute.storage.check_status.enabled": "Block storage is not enabled", + "compute.start_rescue": "Start Rescue", + "compute.stop_rescue": "Stop Rescue" } diff --git a/containers/Compute/locales/zh-CN.json b/containers/Compute/locales/zh-CN.json index 40267faf87..6b02dfb111 100644 --- a/containers/Compute/locales/zh-CN.json +++ b/containers/Compute/locales/zh-CN.json @@ -1711,5 +1711,7 @@ "compute.storage.check_status.host_status": "宿主机服务或状态异常", "compute.vmware.transfer.message": "提示信息:迁移宿主机需属于同一个二层网络且目标宿主机状态正常", "compute.storage.check_status.status": "块存储状态异常", - "compute.storage.check_status.enabled": "块存储未启用" + "compute.storage.check_status.enabled": "块存储未启用", + "compute.start_rescue": "启动救援", + "compute.stop_rescue": "退出救援" } diff --git a/containers/Compute/views/vminstance/constants/actions.js b/containers/Compute/views/vminstance/constants/actions.js index a0dfaa3a1d..7ea7e35da7 100644 --- a/containers/Compute/views/vminstance/constants/actions.js +++ b/containers/Compute/views/vminstance/constants/actions.js @@ -476,6 +476,38 @@ const getSingleActions = function () { }, hidden: () => !(hasSetupKey(['onecloud'])) || this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_sync_config'), }, + // 启动救援模式 + { + label: i18n.t('compute.start_rescue'), + permission: 'server_perform_rescue', + action: () => { + this.createDialog('VmStartRescueDialog', { + data: [obj], + columns: this.columns, + onManager: this.onManager, + }) + }, + meta: () => { + return { validate: cloudEnabled('startRescue', obj) } + }, + hidden: () => this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_rescue'), + }, + // 退出救援模式 TODO + { + label: i18n.t('compute.stop_rescue'), + permission: 'server_perform_rescue_stop', + action: () => { + this.createDialog('VmStopRescueDialog', { + data: [obj], + columns: this.columns, + onManager: this.onManager, + }) + }, + meta: () => { + return { validate: cloudEnabled('stopRescue', obj) } + }, + hidden: () => this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_rescue_stop'), + }, ], }, // * 属性设置 diff --git a/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue b/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue new file mode 100644 index 0000000000..2de05c79a3 --- /dev/null +++ b/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue @@ -0,0 +1,57 @@ + + + diff --git a/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue b/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue new file mode 100644 index 0000000000..4fa667b570 --- /dev/null +++ b/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue @@ -0,0 +1,57 @@ + + + diff --git a/containers/Compute/views/vminstance/utils.js b/containers/Compute/views/vminstance/utils.js index 377acb7834..0bacff5049 100644 --- a/containers/Compute/views/vminstance/utils.js +++ b/containers/Compute/views/vminstance/utils.js @@ -631,6 +631,19 @@ const actionEableMap = { onecloud: ['ready'], }, }, + startRescue: { + cn: i18n.t('compute.start_rescue'), + brand: { + onecloud: ['ready', 'running'], + }, + }, + stopRescue: { + cn: i18n.t('compute.stop_rescue'), + brand: { + // TODO: Add rescue status in frontend. + onecloud: true, + }, + }, } export const commonEnabled = (value, statusArr = ['ready']) => { diff --git a/src/constants/permission.js b/src/constants/permission.js index f6f7682433..6b8edb5b74 100644 --- a/src/constants/permission.js +++ b/src/constants/permission.js @@ -434,6 +434,8 @@ export const PERMISSION = { server_get_cpuset_cores: ['compute', 'servers', 'get', 'cpuset-cores'], server_perform_cpuset: ['compute', 'servers', 'perform', 'cpuset'], server_perform_make_sshable: ['compute', 'servers', 'perform', 'make-sshable'], + server_perform_rescue: ['compute', 'servers', 'perform', 'rescue'], + server_perform_rescue_stop: ['compute', 'servers', 'perform', 'rescue-stop'], /** * images 相关操作 */ From 7f444ec86d17101f1dcb915cea8e12b957df5168 Mon Sep 17 00:00:00 2001 From: Bo Date: Tue, 12 Sep 2023 17:32:23 +0800 Subject: [PATCH 2/2] fix: Update rescue mode. --- README.md | 2 +- containers/Compute/locales/en.json | 4 +++- containers/Compute/locales/zh-CN.json | 4 +++- containers/Compute/views/vminstance/constants/actions.js | 8 ++++---- .../views/vminstance/dialogs/VmStartRescueDialog.vue | 8 +++++++- .../views/vminstance/dialogs/VmStopRescueDialog.vue | 2 +- src/constants/permission.js | 4 ++-- src/locales/en.json | 5 ++++- src/locales/zh-CN.json | 5 ++++- 9 files changed, 29 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 276657e97b..73e08363ec 100644 --- a/README.md +++ b/README.md @@ -81,5 +81,5 @@ yarn build ### Make docker image ```bash -REGISTRY=registry.cn-beijing.aliyuncs.com/yunionio TAG=your-tag ./scripts/docker-push.sh +REGISTRY=registry.cn-beijing.aliyuncs.com/yunionio TAG=your-tag ./scripts/docker_push.sh ``` diff --git a/containers/Compute/locales/en.json b/containers/Compute/locales/en.json index 5560c3d2d8..3af73822fa 100644 --- a/containers/Compute/locales/en.json +++ b/containers/Compute/locales/en.json @@ -1710,5 +1710,7 @@ "compute.storage.check_status.status": "The block storage status is abnormal", "compute.storage.check_status.enabled": "Block storage is not enabled", "compute.start_rescue": "Start Rescue", - "compute.stop_rescue": "Stop Rescue" + "compute.stop_rescue": "Stop Rescue", + "compute.start_rescue_tips": "Use the account password below to access the rescue system. After exiting Rescue Mode, use the original account password to access. Instance memory requires 2GB or more.", + "compute.start_rescue_default_config": "Account:root Password:mosbaremetal" } diff --git a/containers/Compute/locales/zh-CN.json b/containers/Compute/locales/zh-CN.json index 6b02dfb111..58cd93a578 100644 --- a/containers/Compute/locales/zh-CN.json +++ b/containers/Compute/locales/zh-CN.json @@ -1713,5 +1713,7 @@ "compute.storage.check_status.status": "块存储状态异常", "compute.storage.check_status.enabled": "块存储未启用", "compute.start_rescue": "启动救援", - "compute.stop_rescue": "退出救援" + "compute.stop_rescue": "退出救援", + "compute.start_rescue_tips": "使用下面的账号密码进入救援系统。退出救援模式后,使用原账号密码访问。实例内存需要2GB以上。", + "compute.start_rescue_default_config": "账号:root 密码:mosbaremetal" } diff --git a/containers/Compute/views/vminstance/constants/actions.js b/containers/Compute/views/vminstance/constants/actions.js index 7ea7e35da7..13021eb2b6 100644 --- a/containers/Compute/views/vminstance/constants/actions.js +++ b/containers/Compute/views/vminstance/constants/actions.js @@ -479,7 +479,7 @@ const getSingleActions = function () { // 启动救援模式 { label: i18n.t('compute.start_rescue'), - permission: 'server_perform_rescue', + permission: 'server_perform_start_rescue', action: () => { this.createDialog('VmStartRescueDialog', { data: [obj], @@ -490,12 +490,12 @@ const getSingleActions = function () { meta: () => { return { validate: cloudEnabled('startRescue', obj) } }, - hidden: () => this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_rescue'), + hidden: () => this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_start_rescue'), }, // 退出救援模式 TODO { label: i18n.t('compute.stop_rescue'), - permission: 'server_perform_rescue_stop', + permission: 'server_perform_stop_rescue', action: () => { this.createDialog('VmStopRescueDialog', { data: [obj], @@ -506,7 +506,7 @@ const getSingleActions = function () { meta: () => { return { validate: cloudEnabled('stopRescue', obj) } }, - hidden: () => this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_rescue_stop'), + hidden: () => this.$isScopedPolicyMenuHidden('vminstance_hidden_menus.server_perform_stop_rescue'), }, ], }, diff --git a/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue b/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue index 2de05c79a3..bc2043da68 100644 --- a/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue +++ b/containers/Compute/views/vminstance/dialogs/VmStartRescueDialog.vue @@ -2,6 +2,12 @@
{{action}}
+ + +
@@ -38,7 +44,7 @@ export default { id: ids, steadyStatus: 'running', managerArgs: { - action: 'rescue', + action: 'start-rescue', }, }) }, diff --git a/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue b/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue index 4fa667b570..5efa12d21f 100644 --- a/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue +++ b/containers/Compute/views/vminstance/dialogs/VmStopRescueDialog.vue @@ -38,7 +38,7 @@ export default { id: ids, steadyStatus: 'running', managerArgs: { - action: 'rescue-stop', + action: 'stop-rescue', }, }) }, diff --git a/src/constants/permission.js b/src/constants/permission.js index 6b8edb5b74..dc6e2591d3 100644 --- a/src/constants/permission.js +++ b/src/constants/permission.js @@ -434,8 +434,8 @@ export const PERMISSION = { server_get_cpuset_cores: ['compute', 'servers', 'get', 'cpuset-cores'], server_perform_cpuset: ['compute', 'servers', 'perform', 'cpuset'], server_perform_make_sshable: ['compute', 'servers', 'perform', 'make-sshable'], - server_perform_rescue: ['compute', 'servers', 'perform', 'rescue'], - server_perform_rescue_stop: ['compute', 'servers', 'perform', 'rescue-stop'], + server_perform_start_rescue: ['compute', 'servers', 'perform', 'start-rescue'], + server_perform_stop_rescue: ['compute', 'servers', 'perform', 'stop-rescue'], /** * images 相关操作 */ diff --git a/src/locales/en.json b/src/locales/en.json index a391396471..fd492b6361 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -170,7 +170,10 @@ "on": "On", "off": "Off", "qga_exec_command_failed": "QGA execution failed", - "convert_failed": "Convert Failed" + "convert_failed": "Convert Failed", + "start_rescue": "Start Rescue", + "rescuing": "Rescuing", + "stop_rescue": "Stop Rescue" }, "network": { "init": "Initialize", diff --git a/src/locales/zh-CN.json b/src/locales/zh-CN.json index 6267b096ba..78465c9bba 100644 --- a/src/locales/zh-CN.json +++ b/src/locales/zh-CN.json @@ -170,7 +170,10 @@ "on": "运行中", "off": "关机", "qga_exec_command_failed": "QGA执行失败", - "convert_failed": "转换失败" + "convert_failed": "转换失败", + "start_rescue": "启动救援", + "rescuing": "救援中", + "stop_rescue": "退出救援" }, "network": { "init": "初始化",