fix: Notify users to Confirm/Revert after VM resize

When a VM is resized or migrated, the UI only shows "Resizing or Migrating" without indicating that user action is required. The server stays in this state until the user confirms or reverts.

This change adds a notification prompting the user to confirm or revert.

Change-Id: I8bf452129ecfb301f8e94037007ef821e3a975fe
Signed-off-by: Sowmya Nethi <sowmya.kamavaram@rackspace.com>
This commit is contained in:
Sowmya Nethi
2025-09-26 17:00:37 +05:30
parent 38fbc9258a
commit a6f359bf5b
2 changed files with 44 additions and 1 deletions

View File

@@ -14,8 +14,10 @@
import React from 'react'; import React from 'react';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import { reaction } from 'mobx';
import ImageType from 'components/ImageType'; import ImageType from 'components/ImageType';
import Base from 'containers/List'; import Base from 'containers/List';
import Notify from 'components/Notify';
import { import {
instanceStatus, instanceStatus,
transitionStatus, transitionStatus,
@@ -29,6 +31,8 @@ import { ServerGroupInstanceStore } from 'stores/skyline/server-group-instance';
import actionConfigs from './actions'; import actionConfigs from './actions';
export class Instance extends Base { export class Instance extends Base {
notifiedInstances = new Set();
init() { init() {
if (!this.inDetailPage) { if (!this.inDetailPage) {
this.store = globalServerStore; this.store = globalServerStore;
@@ -114,6 +118,45 @@ export class Instance extends Base {
}; };
} }
componentDidMount() {
super.componentDidMount();
this.dispose = reaction(
() => {
const { data } = this.store.list;
return data && data.length > 0
? data.filter((instance) => instance.status === 'verify_resize')
: [];
},
(verifyResizeInstances) => {
if (verifyResizeInstances.length === 0) return;
verifyResizeInstances.forEach((instance) => {
if (!this.notifiedInstances.has(instance.id)) {
Notify.warn(
t(
`Waiting for user to Confirm/Revert the Resize for\n ${instance.id}`
)
);
this.notifiedInstances.add(instance.id);
}
});
},
{
fireImmediately: false,
delay: 100,
}
);
}
componentWillUnmount() {
super.componentWillUnmount();
if (this.dispose) {
this.dispose();
}
this.notifiedInstances.clear();
}
getColumns() { getColumns() {
const columns = [ const columns = [
{ {

View File

@@ -56,7 +56,7 @@ export const stableStatus = {
paused: t('Paused'), paused: t('Paused'),
error: t('Error'), error: t('Error'),
resize: t('Resizing or Migrating'), resize: t('Resizing or Migrating'),
verify_resize: t('Resizing or Migrating'), verify_resize: t('Verify Resize/Migrate'),
revert_resize: t('Revert Resize/Migrate'), revert_resize: t('Revert Resize/Migrate'),
// reboot: t('Reboot'), // reboot: t('Reboot'),
// hard_reboot: t('Hard Reboot'), // hard_reboot: t('Hard Reboot'),