From 101025eaac34fce1d486f9979f97494461e2e11b Mon Sep 17 00:00:00 2001 From: zhuyue Date: Thu, 2 Sep 2021 14:39:24 +0800 Subject: [PATCH] fix: Fix extend volume when instance is locked fix extend volume when instance is locked Change-Id: Ib5333ee118cf95d46790ed8548a172845d2b4a23 --- src/locales/en.json | 3 +++ src/locales/zh.json | 3 +++ .../containers/Instance/actions/Lock.jsx | 18 ++++++++++++++++ .../Volume/actions/ExtendVolume.jsx | 21 ++++++++++++++++++- src/pages/user-center/routes/index.js | 2 +- 5 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/locales/en.json b/src/locales/en.json index 2bcc1298..58a2b0b4 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -930,6 +930,7 @@ "Lock": "Lock", "Lock Instance": "Lock Instance", "Lock Status": "Lock Status", + "Lock instance will lock the operations that have a direct impact on the operation of the instance, such as shutdown, restart, delete, etc. It does not involve the mounting, unmounting and capacity expansion of volumn.": "Lock instance will lock the operations that have a direct impact on the operation of the instance, such as shutdown, restart, delete, etc. It does not involve the mounting, unmounting and capacity expansion of volumn.", "Locked": "Locked", "Log in": "Log in", "Login Name": "Login Name", @@ -1584,6 +1585,7 @@ "The security group is similar to the firewall function for setting up network access control, or you can go to the console and create a new security group. (Note: The security group you selected will work on all virtual LANS on the instances.)": "The security group is similar to the firewall function for setting up network access control, or you can go to the console and create a new security group. (Note: The security group you selected will work on all virtual LANS on the instances.)", "The selected VPC/ subnet does not have IPv6 enabled.": "The selected VPC/ subnet does not have IPv6 enabled.", "The selected network has no subnet": "The selected network has no subnet", + "The server {name} is locked. Please unlock first.": "The server {name} is locked. Please unlock first.", "The start source is a template used to create an instance. You can choose an image or a bootable volume.": "The start source is a template used to create an instance. You can choose an image or a bootable volume.", "The starting number must be less than the ending number": "The starting number must be less than the ending number", "The timeout period of waiting for the return of the health check request, the check timeout will be judged as a check failure": "The timeout period of waiting for the return of the health check request, the check timeout will be judged as a check failure", @@ -1675,6 +1677,7 @@ "Used by tunnel(s): {names}. ID(s): {ids}": "Used by tunnel(s): {names}. ID(s): {ids}", "User": "User", "User Account": "User Account", + "User Center": "User Center", "User Data": "User Data", "User Detail": "User Detail", "User Edit": "User Edit", diff --git a/src/locales/zh.json b/src/locales/zh.json index 7fde1fa2..304f8ba8 100644 --- a/src/locales/zh.json +++ b/src/locales/zh.json @@ -930,6 +930,7 @@ "Lock": "锁定", "Lock Instance": "锁定云主机", "Lock Status": "锁定状态", + "Lock instance will lock the operations that have a direct impact on the operation of the instance, such as shutdown, restart, delete, etc. It does not involve the mounting, unmounting and capacity expansion of volumn.": "云主机锁定操作会锁定对云主机运行有直接影响的操作, 例如: 关机, 重启, 删除等,不涉及云硬盘的挂载卸载和扩容。", "Locked": "锁定", "Log in": "登录", "Login Name": "登录名", @@ -1584,6 +1585,7 @@ "The security group is similar to the firewall function for setting up network access control, or you can go to the console and create a new security group. (Note: The security group you selected will work on all virtual LANS on the instances.)": "安全组类似防火墙功能,用于设置网络访问控制,您也可以前往控制台新建安全组。(注:您所选的安全组将作用于云主机的全部虚拟网卡。)", "The selected VPC/ subnet does not have IPv6 enabled.": "所选的VPC/子网未开通IPv6", "The selected network has no subnet": "选择的网络没有子网", + "The server {name} is locked. Please unlock first.": "云主机{name}已被锁定,请先解锁。", "The start source is a template used to create an instance. You can choose an image or a bootable volume.": "启动源是用来创建云主机的模板, 您可以选择镜像或者可启动的卷。", "The starting number must be less than the ending number": "起始数字必须小于结束数字", "The timeout period of waiting for the return of the health check request, the check timeout will be judged as a check failure": "等待健康检查请求返回的超时时间,检查超时将会被判定为一次检查失败", @@ -1675,6 +1677,7 @@ "Used by tunnel(s): {names}. ID(s): {ids}": "被隧道使用中:{names}。 ID:{ids}", "User": "用户", "User Account": "用户账户", + "User Center": "用户中心", "User Data": "用户数据", "User Detail": "用户详情", "User Edit": "编辑用户", diff --git a/src/pages/compute/containers/Instance/actions/Lock.jsx b/src/pages/compute/containers/Instance/actions/Lock.jsx index fc901359..418f0395 100644 --- a/src/pages/compute/containers/Instance/actions/Lock.jsx +++ b/src/pages/compute/containers/Instance/actions/Lock.jsx @@ -57,6 +57,24 @@ export default class LockAction extends ConfirmAction { return errorMsg; }; + confirmContext = (data) => { + if (!this.messageHasItemName) { + return t('Are you sure to {action}?', { + action: this.actionNameDisplay || this.title, + }); + } + const name = this.getName(data); + return ( + t('Are you sure to {action} (instance: {name})?', { + action: this.actionNameDisplay || this.title, + name, + }) + + t( + 'Lock instance will lock the operations that have a direct impact on the operation of the instance, such as shutdown, restart, delete, etc. It does not involve the mounting, unmounting and capacity expansion of volumn.' + ) + ); + }; + onSubmit = () => { const { id } = this.item; return globalServerStore.lock({ id }); diff --git a/src/pages/storage/containers/Volume/actions/ExtendVolume.jsx b/src/pages/storage/containers/Volume/actions/ExtendVolume.jsx index 8c7f73cb..f912c7aa 100644 --- a/src/pages/storage/containers/Volume/actions/ExtendVolume.jsx +++ b/src/pages/storage/containers/Volume/actions/ExtendVolume.jsx @@ -16,6 +16,9 @@ import { inject, observer } from 'mobx-react'; import { ModalAction } from 'containers/Action'; import globalVolumeStore from 'stores/cinder/volume'; import { isAvailableOrInUse } from 'resources/volume'; +import { get } from 'lodash'; +import client from 'client'; +import Notify from 'components/Notify'; export class ExtendVolume extends ModalAction { static id = 'extend-snapshot'; @@ -69,9 +72,25 @@ export class ExtendVolume extends ModalAction { this.store = globalVolumeStore; } - onSubmit = (values) => { + onSubmit = async (values) => { const { volume, ...rest } = values; const { id } = this.item; + + const instanceId = get(this.item, 'attachments[0].server_id'); + if (instanceId) { + const { server } = await client.nova.servers.show(instanceId); + if (server.locked) { + Notify.errorWithDetail( + t('The server {name} is locked. Please unlock first.', { + name: server.name, + }), + t('The server {name} is locked. Please unlock first.', { + name: server.name, + }) + ); + return Promise.reject(); + } + } return this.store.extendSize(id, rest); }; } diff --git a/src/pages/user-center/routes/index.js b/src/pages/user-center/routes/index.js index aed6e55c..ca8ae664 100644 --- a/src/pages/user-center/routes/index.js +++ b/src/pages/user-center/routes/index.js @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -import BaseLayout from '@/layouts/Basic'; +import BaseLayout from 'layouts/Basic'; import E404 from 'pages/base/containers/404'; import UserCenter from '../containers/UserCenter';