diff --git a/config/routes.ts b/config/routes.ts index fac1820c..515812f3 100644 --- a/config/routes.ts +++ b/config/routes.ts @@ -186,7 +186,6 @@ const baseRoutes = [ name: 'gpuService', path: '/gpu-service', key: 'gpuService', - access: 'canSeeAdmin', routes: [ { path: '/gpu-service', @@ -224,6 +223,7 @@ const baseRoutes = [ path: '/gpu-service/storage-types', key: 'gpuServiceStorageTypes', icon: 'icon-storage-outlined', + access: 'canSeeAdmin', selectedIcon: 'icon-storage-filled', defaultIcon: 'icon-storage-outlined', component: './gpu-service/storage-types' diff --git a/src/pages/_components/number-selection/index.tsx b/src/pages/_components/number-selection/index.tsx index a679ee2e..d2dc0b22 100644 --- a/src/pages/_components/number-selection/index.tsx +++ b/src/pages/_components/number-selection/index.tsx @@ -46,9 +46,11 @@ const NumberSelection: React.FC = ({ { length: Math.max(0, maxCount) }, (_, i) => i + 1 ); + if (min <= 0) { + presetItems.unshift(0); + } const items = presetItems; - const isItemDisabled = (num: number) => - !!disabled || num > max || num < min; + const isItemDisabled = (num: number) => !!disabled || num > max || num < min; const [inputValue, setInputValue] = useState(() => value !== undefined && value !== null && !presetItems.includes(value) ? value @@ -113,7 +115,7 @@ const NumberSelection: React.FC = ({ aria-disabled={itemDisabled} tabIndex={itemDisabled ? -1 : 0} className={classNames(styles.numberItem, { - [styles.active]: num === value && !!value, + [styles.active]: num === value && value != null, [styles.itemDisabled]: itemDisabled && !disabled })} onClick={() => handleSelect(num)} @@ -134,7 +136,7 @@ const NumberSelection: React.FC = ({
= ({ max={max} step={step} disabled={disabled} - value={inputValue || undefined} + value={inputValue ?? undefined} style={{ fontSize: 14, width: 60, @@ -154,7 +156,7 @@ const NumberSelection: React.FC = ({ }} styles={{ input: { - fontWeight: inputValue ? 500 : 400, + fontWeight: inputValue != null ? 500 : 400, ...(styles?.input as React.CSSProperties) } }} diff --git a/src/pages/gpu-service/instances/components/instance-type-item.tsx b/src/pages/gpu-service/instances/components/instance-type-item.tsx index 0cc7aa89..25e5976d 100644 --- a/src/pages/gpu-service/instances/components/instance-type-item.tsx +++ b/src/pages/gpu-service/instances/components/instance-type-item.tsx @@ -162,7 +162,7 @@ const InstanceTypeItem: React.FC = ({ item }) => { show={!!remainingData.cpu} showDot={true} icon="icon-cpu" - label="vCPU" + label="CPU" value={remainingData.cpu ?? '-'} > diff --git a/src/pages/gpu-service/instances/components/view-events-modal.tsx b/src/pages/gpu-service/instances/components/view-events-modal.tsx index 5b374b44..5d287542 100644 --- a/src/pages/gpu-service/instances/components/view-events-modal.tsx +++ b/src/pages/gpu-service/instances/components/view-events-modal.tsx @@ -18,6 +18,7 @@ type ViewEventsModalProps = { open: boolean; name: string; namespace: string; + volumeName?: string; clusterID?: number; hasPersistentVolume?: boolean; onCancel: () => void; @@ -32,8 +33,15 @@ const eventTypeStatus: Record = { const ViewEventsModal: React.FC = (props) => { const intl = useIntl(); - const { open, onCancel, name, namespace, clusterID, hasPersistentVolume } = - props || {}; + const { + open, + onCancel, + name, + namespace, + clusterID, + volumeName, + hasPersistentVolume + } = props || {}; const [activeKey, setActiveKey] = useState('instance'); const { @@ -57,7 +65,7 @@ const ViewEventsModal: React.FC = (props) => { if (!name || !namespace || !clusterID) return; fetchInstanceEvents({ name, namespace, clusterID }); if (hasPersistentVolume) { - fetchVolumeEvents({ name, namespace, clusterID }); + fetchVolumeEvents({ name: volumeName || '', namespace, clusterID }); } }; @@ -206,7 +214,10 @@ const ViewEventsModal: React.FC = (props) => { return ( + {intl.formatMessage({ id: 'common.button.viewevent' })} @@ -232,6 +243,9 @@ const ViewEventsModal: React.FC = (props) => { styles={{ wrapper: { borderRadius: 0 + }, + container: { + paddingInline: 0 } }} width="1000px" diff --git a/src/pages/gpu-service/instances/config/index.ts b/src/pages/gpu-service/instances/config/index.ts index 1b10c5b4..82aa0735 100644 --- a/src/pages/gpu-service/instances/config/index.ts +++ b/src/pages/gpu-service/instances/config/index.ts @@ -13,7 +13,8 @@ export const InstanceStatusValueMap = { Initialized: 'Initialized', Preparing: 'Preparing', NotReady: 'NotReady', - Ready: 'Ready' + Ready: 'Ready', + Staring: 'Staring' }; export const InstanceStatusLabelMap: Record = { @@ -25,7 +26,8 @@ export const InstanceStatusLabelMap: Record = { [InstanceStatusValueMap.Initialized]: 'Initialized', [InstanceStatusValueMap.Preparing]: 'Preparing', [InstanceStatusValueMap.NotReady]: 'NotReady', - [InstanceStatusValueMap.Ready]: 'Ready' + [InstanceStatusValueMap.Ready]: 'Ready', + [InstanceStatusValueMap.Staring]: 'Staring' }; export const status: Record = { @@ -37,7 +39,8 @@ export const status: Record = { [InstanceStatusValueMap.Initialized]: StatusMaps.transitioning, [InstanceStatusValueMap.Preparing]: StatusMaps.transitioning, [InstanceStatusValueMap.NotReady]: StatusMaps.error, - [InstanceStatusValueMap.Ready]: StatusMaps.success + [InstanceStatusValueMap.Ready]: StatusMaps.success, + [InstanceStatusValueMap.Staring]: StatusMaps.transitioning }; // Lifecycle actions (logs/events/start/stop) require K8s proxy endpoints that @@ -207,6 +210,10 @@ export const pickCandidateForAccelerator = < const sorted = [...tiers].sort( (a, b) => parseQuantity(a.onceMaxRequest) - parseQuantity(b.onceMaxRequest) ); - const tier = sorted.find((t) => parseQuantity(t.onceMaxRequest) >= count); + const tier = sorted.find((t) => + count === 0 + ? parseQuantity(t.onceMaxRequest) > count + : parseQuantity(t.onceMaxRequest) >= count + ); return tier?.candidates?.[0] ?? null; }; diff --git a/src/pages/gpu-service/instances/forms/storage-volume.tsx b/src/pages/gpu-service/instances/forms/storage-volume.tsx index 62259c16..ce263ba7 100644 --- a/src/pages/gpu-service/instances/forms/storage-volume.tsx +++ b/src/pages/gpu-service/instances/forms/storage-volume.tsx @@ -199,6 +199,7 @@ const StorageVolume = ({ >