diff --git a/frontend/packages/console-shared/src/index.ts b/frontend/packages/console-shared/src/index.ts
index 45178e73428..d45ca4ff4f6 100644
--- a/frontend/packages/console-shared/src/index.ts
+++ b/frontend/packages/console-shared/src/index.ts
@@ -2,3 +2,4 @@ export * from './components';
export * from './constants';
export * from './selectors';
export * from './types';
+export * from './utils';
diff --git a/frontend/packages/console-shared/src/selectors/common.ts b/frontend/packages/console-shared/src/selectors/common.ts
index e1c40dbf0c4..cdcd6367c4a 100644
--- a/frontend/packages/console-shared/src/selectors/common.ts
+++ b/frontend/packages/console-shared/src/selectors/common.ts
@@ -2,11 +2,11 @@ import * as _ from 'lodash';
import { K8sResourceKind } from '@console/internal/module/k8s';
-export const getName = (value: K8sResourceKind) =>
+export const getName = (value: A) =>
_.get(value, 'metadata.name') as K8sResourceKind['metadata']['name'];
-export const getNamespace = (value: K8sResourceKind) =>
+export const getNamespace = (value: A) =>
_.get(value, 'metadata.namespace') as K8sResourceKind['metadata']['namespace'];
-export const getUID = (value: K8sResourceKind) =>
+export const getUID = (value: A) =>
_.get(value, 'metadata.uid') as K8sResourceKind['metadata']['uid'];
-export const getDeletetionTimestamp = (value: K8sResourceKind) =>
+export const getDeletetionTimestamp = (value: A) =>
_.get(value, 'metadata.deletionTimestamp') as K8sResourceKind['metadata']['deletionTimestamp'];
diff --git a/frontend/packages/console-shared/src/utils/index.ts b/frontend/packages/console-shared/src/utils/index.ts
new file mode 100644
index 00000000000..04bca77e0de
--- /dev/null
+++ b/frontend/packages/console-shared/src/utils/index.ts
@@ -0,0 +1 @@
+export * from './utils';
diff --git a/frontend/packages/console-shared/src/utils/utils.ts b/frontend/packages/console-shared/src/utils/utils.ts
new file mode 100644
index 00000000000..f20e968a55d
--- /dev/null
+++ b/frontend/packages/console-shared/src/utils/utils.ts
@@ -0,0 +1,28 @@
+import { K8sResourceKind } from '@console/internal/module/k8s';
+import { FirehoseResult } from '@console/internal/components/utils';
+import { getUID } from '../selectors';
+
+export type EntityMap = { [propertyName: string]: A };
+export type K8sEntityMap = EntityMap;
+
+type KeyResolver = (entity: A) => string;
+
+export const createBasicLookup = (list: A[], getKey: KeyResolver): EntityMap => {
+ return (list || []).reduce((lookup, entity) => {
+ const key = getKey(entity);
+ if (key) {
+ lookup[key] = entity;
+ }
+ return lookup;
+ }, {});
+};
+
+export const createLookup = (
+ loadingList: FirehoseResult,
+ getKey?: KeyResolver,
+): K8sEntityMap => {
+ if (loadingList && loadingList.loaded) {
+ return createBasicLookup(loadingList.data, getKey || getUID);
+ }
+ return {};
+};
diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-disks/types.ts b/frontend/packages/kubevirt-plugin/src/components/vm-disks/types.ts
index fcbcf2de7cc..20225baf465 100644
--- a/frontend/packages/kubevirt-plugin/src/components/vm-disks/types.ts
+++ b/frontend/packages/kubevirt-plugin/src/components/vm-disks/types.ts
@@ -1,4 +1,5 @@
-import { EntityMap, VMLikeEntityKind, VMKind } from '../../types';
+import { EntityMap } from '@console/shared';
+import { VMLikeEntityKind, VMKind } from '../../types';
export enum StorageType {
STORAGE_TYPE_VM = 'storage-type-vm',
diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-disks/vm-disks.tsx b/frontend/packages/kubevirt-plugin/src/components/vm-disks/vm-disks.tsx
index cf53a2899c1..8c02c99bc65 100644
--- a/frontend/packages/kubevirt-plugin/src/components/vm-disks/vm-disks.tsx
+++ b/frontend/packages/kubevirt-plugin/src/components/vm-disks/vm-disks.tsx
@@ -7,7 +7,7 @@ import { Table } from '@console/internal/components/factory';
import { PersistentVolumeClaimModel } from '@console/internal/models';
import { Firehose, FirehoseResult, Kebab } from '@console/internal/components/utils';
import { getResource } from 'kubevirt-web-ui-components';
-import { getNamespace, getName } from '@console/shared';
+import { getNamespace, getName, createBasicLookup, createLookup } from '@console/shared';
import { useSafetyFirst } from '@console/internal/components/safety-first';
import { K8sResourceKind } from '@console/internal/module/k8s';
import { sortable } from '@patternfly/react-table';
@@ -22,7 +22,6 @@ import {
getVolumePersistentVolumeClaimName,
getVolumes,
} from '../../selectors/vm';
-import { createBasicLookup, createLookup } from '../../utils';
import { DiskRow } from './disk-row';
import { StorageBundle, StorageType, VMDiskRowProps } from './types';
import { CreateDiskRowFirehose } from './create-disk-row';
diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-nics/types.ts b/frontend/packages/kubevirt-plugin/src/components/vm-nics/types.ts
index 2bef888a8da..2ef281fc0c3 100644
--- a/frontend/packages/kubevirt-plugin/src/components/vm-nics/types.ts
+++ b/frontend/packages/kubevirt-plugin/src/components/vm-nics/types.ts
@@ -1,4 +1,5 @@
-import { EntityMap, VMKind, VMLikeEntityKind } from '../../types';
+import { EntityMap } from '@console/shared';
+import { VMKind, VMLikeEntityKind } from '../../types';
export enum NetworkRowType {
NETWORK_TYPE_VM = 'network-type-vm',
diff --git a/frontend/packages/kubevirt-plugin/src/components/vm-nics/vm-nics.tsx b/frontend/packages/kubevirt-plugin/src/components/vm-nics/vm-nics.tsx
index 4a85114d971..02c62b61ecb 100644
--- a/frontend/packages/kubevirt-plugin/src/components/vm-nics/vm-nics.tsx
+++ b/frontend/packages/kubevirt-plugin/src/components/vm-nics/vm-nics.tsx
@@ -7,6 +7,7 @@ import { Table } from '@console/internal/components/factory';
import { useSafetyFirst } from '@console/internal/components/safety-first';
import { sortable } from '@patternfly/react-table';
+import { createBasicLookup } from '@console/shared';
import { VMLikeEntityKind } from '../../types';
import { asVm } from '../../selectors/selectors';
import { getInterfaces, getNetworks, getVmPreferableNicBus } from '../../selectors/vm';
@@ -14,7 +15,6 @@ import { NicRow } from './nic-row';
import { NetworkBundle, NetworkRowType, VMNicRowProps } from './types';
import { CreateNicRowConnected } from './create-nic-row';
import { dimensifyHeader } from '../../utils/table';
-import { createBasicLookup } from '../../utils';
import { getInterfaceBinding, getNetworkName, nicTableColumnClasses } from './utils';
import { VMLikeEntityTabProps } from '../vms/types';
diff --git a/frontend/packages/kubevirt-plugin/src/components/vms/vm.tsx b/frontend/packages/kubevirt-plugin/src/components/vms/vm.tsx
index 7e00b30614b..d6ed890cec6 100644
--- a/frontend/packages/kubevirt-plugin/src/components/vms/vm.tsx
+++ b/frontend/packages/kubevirt-plugin/src/components/vms/vm.tsx
@@ -11,7 +11,7 @@ import {
// VM_SIMPLE_STATUS_TO_TEXT,
// DASHES,
} from 'kubevirt-web-ui-components';
-import { getName, getNamespace, getUID } from '@console/shared';
+import { getName, getNamespace, getUID, createLookup, K8sEntityMap } from '@console/shared';
import { NamespaceModel, PodModel } from '@console/internal/models';
import { Table, MultiListPage, TableRow, TableData } from '@console/internal/components/factory';
@@ -24,12 +24,12 @@ import {
VirtualMachineModel,
} from '../../models';
-import { K8sEntityMap, VMIKind, VMKind } from '../../types';
+import { VMIKind, VMKind } from '../../types';
import { menuActions } from './menu-actions';
-import { createLookup, getLookupId } from '../../utils';
import { getMigrationVMIName, isMigrating } from '../../selectors/vmi-migration';
import { vmStatusFilter } from './table-filters';
import { dimensifyHeader, dimensifyRow } from '../../utils/table';
+import { getBasicID } from '../../utils';
import { openCreateVmWizard } from '../modals';
@@ -77,10 +77,10 @@ const VMRow: React.FC = ({
const namespace = getNamespace(vm);
const uid = getUID(vm);
const vmStatus = getVmStatus(vm, pods, migrations);
- const lookupId = getLookupId(vm);
+ const lookupID = getBasicID(vm);
- const migration = migrationLookup[lookupId];
- const vmi = vmiLookup[lookupId];
+ const migration = migrationLookup[lookupID];
+ const vmi = vmiLookup[lookupID];
return (
@@ -121,7 +121,7 @@ const VMList: React.FC & VMListProps> = (prop
customData={{
pods: resources.pods.data || [],
migrations: resources.migrations.data || [],
- vmiLookup: createLookup(resources.vmis),
+ vmiLookup: createLookup(resources.vmis, getBasicID),
migrationLookup: createLookup(
resources.migrations,
(m) => isMigrating(m) && `${getNamespace(m)}-${getMigrationVMIName(m)}`,
diff --git a/frontend/packages/kubevirt-plugin/src/k8s/requests/vmi/migration.ts b/frontend/packages/kubevirt-plugin/src/k8s/requests/vmi/migration.ts
index ef4d02162d5..ec1c4da27cc 100644
--- a/frontend/packages/kubevirt-plugin/src/k8s/requests/vmi/migration.ts
+++ b/frontend/packages/kubevirt-plugin/src/k8s/requests/vmi/migration.ts
@@ -3,9 +3,9 @@ import { k8sCreate } from '@console/internal/module/k8s';
import { VMIKind } from '../../../types/vm';
import { VirtualMachineInstanceMigrationModel } from '../../../models';
import { Migration } from './objects/migration';
-import { prefixedId } from '../../../utils';
+import { prefixedID } from '../../../utils';
-export const getMigrationName = (vmi: VMIKind) => prefixedId(getName(vmi), 'migration');
+export const getMigrationName = (vmi: VMIKind) => prefixedID(getName(vmi), 'migration');
export const startVMIMigration = (vmi: VMIKind) => {
const migration = new Migration().setName(getMigrationName(vmi)).setVMI(vmi);
diff --git a/frontend/packages/kubevirt-plugin/src/models/index.ts b/frontend/packages/kubevirt-plugin/src/models/index.ts
index a7f7102e5b7..35678e85a59 100644
--- a/frontend/packages/kubevirt-plugin/src/models/index.ts
+++ b/frontend/packages/kubevirt-plugin/src/models/index.ts
@@ -96,9 +96,9 @@ export const V2VVMwareModel: K8sKind = {
id: 'v2vvmware',
};
-export const NodeMaintenance: K8sKind = {
- label: 'NodeMaintenance',
- labelPlural: 'NodeMaintenances',
+export const NodeMaintenanceModel: K8sKind = {
+ label: 'Node Maintenance',
+ labelPlural: 'Node Maintenances',
apiVersion: 'v1alpha1',
apiGroup: 'kubevirt.io',
plural: 'nodemaintenances',
diff --git a/frontend/packages/kubevirt-plugin/src/selectors/vm/combined.ts b/frontend/packages/kubevirt-plugin/src/selectors/vm/combined.ts
index e2deb2bbe1c..474dc93b8ae 100644
--- a/frontend/packages/kubevirt-plugin/src/selectors/vm/combined.ts
+++ b/frontend/packages/kubevirt-plugin/src/selectors/vm/combined.ts
@@ -4,7 +4,7 @@ import {
VM_STATUS_V2V_CONVERSION_IN_PROGRESS,
} from 'kubevirt-web-ui-components';
-import { getName } from '@console/shared';
+import { getName, createBasicLookup } from '@console/shared';
import { K8sResourceKind } from '@console/internal/module/k8s';
import { VMIKind, VMKind } from '../../types/vm';
@@ -12,7 +12,6 @@ import { getUsedNetworks, isVMRunning } from './selectors';
import { VMMultiStatus } from '../../types';
import { Network } from './types';
import { NetworkType, POD_NETWORK } from '../../constants/vm';
-import { createBasicLookup } from '../../utils';
const IMPORTING_STATUSES = new Set([VM_STATUS_IMPORTING, VM_STATUS_V2V_CONVERSION_IN_PROGRESS]);
diff --git a/frontend/packages/kubevirt-plugin/src/selectors/vm/selectors.ts b/frontend/packages/kubevirt-plugin/src/selectors/vm/selectors.ts
index a37a2fa51c3..289aa5866b9 100644
--- a/frontend/packages/kubevirt-plugin/src/selectors/vm/selectors.ts
+++ b/frontend/packages/kubevirt-plugin/src/selectors/vm/selectors.ts
@@ -1,10 +1,10 @@
import * as _ from 'lodash';
+import { createBasicLookup } from '@console/shared';
import { getDiskBus } from './disk';
import { BUS_VIRTIO, NetworkType } from '../../constants/vm';
import { VMKind } from '../../types';
import { getNicBus } from './nic';
import { Network } from './types';
-import { createBasicLookup } from '../../utils';
export const getDisks = (vm: VMKind) => _.get(vm, 'spec.template.spec.domain.devices.disks', []);
export const getInterfaces = (vm: VMKind) =>
diff --git a/frontend/packages/kubevirt-plugin/src/types/types.ts b/frontend/packages/kubevirt-plugin/src/types/types.ts
index ca6a04256f2..8de215bf808 100644
--- a/frontend/packages/kubevirt-plugin/src/types/types.ts
+++ b/frontend/packages/kubevirt-plugin/src/types/types.ts
@@ -1,11 +1,8 @@
-import { K8sResourceKind, PodKind, TemplateKind } from '@console/internal/module/k8s';
+import { PodKind, TemplateKind } from '@console/internal/module/k8s';
import { VMKind } from './vm';
export type VMLikeEntityKind = VMKind | TemplateKind;
-export type EntityMap = { [propertyName: string]: A };
-export type K8sEntityMap = EntityMap;
-
export type VMMultiStatus = {
status: string;
message?: string;
diff --git a/frontend/packages/kubevirt-plugin/src/utils/index.ts b/frontend/packages/kubevirt-plugin/src/utils/index.ts
index d5a7c41f7be..019a86f7e29 100644
--- a/frontend/packages/kubevirt-plugin/src/utils/index.ts
+++ b/frontend/packages/kubevirt-plugin/src/utils/index.ts
@@ -1,34 +1,11 @@
import { FirehoseResult } from '@console/internal/components/utils';
-import { getName, getNamespace } from '@console/shared';
import { K8sResourceKind } from '@console/internal/module/k8s';
-import { EntityMap, K8sEntityMap } from '../types';
-
-type KeyResolver = (entity: A) => string;
+import { getName, getNamespace } from '@console/shared';
-export const getLookupId = (entity: A): string =>
+export const getBasicID = (entity: A): string =>
`${getNamespace(entity)}-${getName(entity)}`;
-export const createBasicLookup = (list: A[], getKey: KeyResolver): EntityMap => {
- return (list || []).reduce((lookup, entity) => {
- const key = getKey(entity);
- if (key) {
- lookup[key] = entity;
- }
- return lookup;
- }, {});
-};
-
-export const createLookup = (
- loadingList: FirehoseResult,
- getKey?: KeyResolver,
-): K8sEntityMap => {
- if (loadingList && loadingList.loaded) {
- return createBasicLookup(loadingList.data, getKey || getLookupId);
- }
- return {};
-};
-
-export const prefixedId = (idPrefix: string, id: string): string =>
+export const prefixedID = (idPrefix: string, id: string): string =>
idPrefix && id ? `${idPrefix}-${id}` : null;
export const getLoadedData = (
diff --git a/frontend/packages/kubevirt-plugin/src/utils/validations/vm/nic.ts b/frontend/packages/kubevirt-plugin/src/utils/validations/vm/nic.ts
index 906c9cc02df..c6487f78337 100644
--- a/frontend/packages/kubevirt-plugin/src/utils/validations/vm/nic.ts
+++ b/frontend/packages/kubevirt-plugin/src/utils/validations/vm/nic.ts
@@ -1,5 +1,5 @@
import { validateDNS1123SubdomainValue, VALIDATION_ERROR_TYPE } from 'kubevirt-web-ui-components';
-import { EntityMap } from '../../../types';
+import { EntityMap } from '@console/shared';
export const validateNicName = (name: string, interfaceLookup: EntityMap) => {
let validation = validateDNS1123SubdomainValue(name);