From ae3845e57b17e4e4a50ccfd4ffcf1344bc37fdc2 Mon Sep 17 00:00:00 2001 From: suomiy Date: Tue, 9 Jul 2019 15:37:29 +0200 Subject: [PATCH] shared: move lookup utils from kubevirt-plugin --- frontend/packages/console-shared/src/index.ts | 1 + .../console-shared/src/selectors/common.ts | 8 ++--- .../console-shared/src/utils/index.ts | 1 + .../console-shared/src/utils/utils.ts | 28 ++++++++++++++++++ .../src/components/vm-disks/types.ts | 3 +- .../src/components/vm-disks/vm-disks.tsx | 3 +- .../src/components/vm-nics/types.ts | 3 +- .../src/components/vm-nics/vm-nics.tsx | 2 +- .../kubevirt-plugin/src/components/vms/vm.tsx | 14 ++++----- .../src/k8s/requests/vmi/migration.ts | 4 +-- .../kubevirt-plugin/src/models/index.ts | 6 ++-- .../src/selectors/vm/combined.ts | 3 +- .../src/selectors/vm/selectors.ts | 2 +- .../kubevirt-plugin/src/types/types.ts | 5 +--- .../kubevirt-plugin/src/utils/index.ts | 29 ++----------------- .../src/utils/validations/vm/nic.ts | 2 +- 16 files changed, 59 insertions(+), 55 deletions(-) create mode 100644 frontend/packages/console-shared/src/utils/index.ts create mode 100644 frontend/packages/console-shared/src/utils/utils.ts 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);