From 543127b6717dd9b2451c6a13cd750bba0fc664a5 Mon Sep 17 00:00:00 2001 From: Jiri Tomasek Date: Fri, 30 Aug 2019 19:59:35 +0200 Subject: [PATCH] Detect baremetal platform Since the baremetal operator CRD can be installed on non baremetal cluster, this change introduces additional baremetal platform detection by checking the infrastructure.cluster platform which is used to enable metal3-plugin https://bugzilla.redhat.com/show_bug.cgi?id=1748219 --- .../storage-dashboard/details-card.tsx | 2 +- .../top-consumers-card/top-consumers-card.tsx | 7 +++++-- .../src/components/ocs-install/node-list.tsx | 3 ++- .../ceph-storage-plugin/src/selectors/index.ts | 3 --- .../src/typings/dashboards.ts | 2 +- .../console-shared/src/selectors/index.ts | 1 + .../src/selectors/infrastructure.ts | 5 +++++ frontend/packages/metal3-plugin/src/plugin.ts | 5 +++-- .../components/details-card/details-card.tsx | 2 +- frontend/public/actions/features.ts | 18 +++++++++++++++--- .../inventory-card/inventory-item.tsx | 4 ++-- .../components/dashboards-page/dashboards.tsx | 6 +++--- .../overview-dashboard/capacity-card.tsx | 4 ++-- .../overview-dashboard/details-card.tsx | 4 +--- .../overview-dashboard/health-card.tsx | 4 ++-- .../overview-dashboard/inventory-card.tsx | 4 ++-- .../overview-dashboard/top-consumers-card.tsx | 4 ++-- .../overview-dashboard/utilization-card.tsx | 6 +++--- .../public/components/dashboards-page/utils.ts | 16 ++++++++++++++-- frontend/public/const.ts | 1 + 20 files changed, 66 insertions(+), 35 deletions(-) create mode 100644 frontend/packages/console-shared/src/selectors/infrastructure.ts diff --git a/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/details-card.tsx b/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/details-card.tsx index 3e2db0996fe..816873d90a5 100644 --- a/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/details-card.tsx +++ b/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/details-card.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import * as _ from 'lodash'; +import { getInfrastructurePlatform } from '@console/shared'; import { DashboardCard } from '@console/internal/components/dashboard/dashboard-card/card'; import { DashboardCardBody } from '@console/internal/components/dashboard/dashboard-card/card-body'; import { DashboardCardHeader } from '@console/internal/components/dashboard/dashboard-card/card-header'; @@ -16,7 +17,6 @@ import { K8sResourceKind } from '@console/internal/module/k8s/index'; import { getName } from '@console/shared/src/selectors/common'; import { referenceForModel } from '@console/internal/module/k8s/k8s'; import { CephClusterModel } from '../../../models'; -import { getInfrastructurePlatform } from '../../../selectors'; const infrastructureResource: FirehoseResource = { kind: referenceForModel(InfrastructureModel), diff --git a/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/top-consumers-card/top-consumers-card.tsx b/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/top-consumers-card/top-consumers-card.tsx index c70c7c1a617..f2b853c00e7 100644 --- a/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/top-consumers-card/top-consumers-card.tsx +++ b/frontend/packages/ceph-storage-plugin/src/components/dashboard-page/storage-dashboard/top-consumers-card/top-consumers-card.tsx @@ -12,7 +12,10 @@ import { } from '@console/internal/components/dashboards-page/with-dashboard-resources'; import { DashboardStorageExtension } from '@console/plugin-sdk'; import { connectToFlags, FlagsObject, WithFlagsProps } from '@console/internal/reducers/features'; -import { getFlagsForExtensions } from '@console/internal/components/dashboards-page/utils'; +import { + getFlagsForExtensions, + isDashboardExtensionInUse, +} from '@console/internal/components/dashboards-page/utils'; import { BY_REQUESTED, BY_USED, PODS, PROJECTS, STORAGE_CLASSES } from '../../../../constants'; import { TOP_CONSUMER_QUERIES } from '../../../../constants/queries'; import { TopConsumersBody } from './top-consumers-card-body'; @@ -49,7 +52,7 @@ const getTopConsumersQueriesMap = ( }; const getItems = (plugin: DashboardStorageExtension[], flags: FlagsObject) => - plugin.filter((e) => flags[e.properties.required]); + plugin.filter((e) => isDashboardExtensionInUse(e, flags)); const getTopConsumersQueries = (flags: FlagsObject) => { let topConsumers: TopConsumersQueries = { ...TOP_CONSUMER_QUERIES }; diff --git a/frontend/packages/ceph-storage-plugin/src/components/ocs-install/node-list.tsx b/frontend/packages/ceph-storage-plugin/src/components/ocs-install/node-list.tsx index 11d9886cff4..9c0447c762e 100644 --- a/frontend/packages/ceph-storage-plugin/src/components/ocs-install/node-list.tsx +++ b/frontend/packages/ceph-storage-plugin/src/components/ocs-install/node-list.tsx @@ -9,6 +9,7 @@ import { TableVariant, TableGridBreakpoint, } from '@patternfly/react-table'; +import { getInfrastructurePlatform } from '@console/shared'; import { tableFilters } from '@console/internal/components/factory/table-filters'; import { ActionGroup, Button } from '@patternfly/react-core'; import { ButtonBar } from '@console/internal/components/utils/button-bar'; @@ -263,7 +264,7 @@ const CustomNodeTable: React.FC = ({ data, loaded, ocsProp k8sGet(InfrastructureModel, 'cluster') .then((infra: K8sResourceKind) => { // find infra supported provisioner - provisioner = infraProvisionerMap[_.lowerCase(_.get(infra, 'status.platform'))]; + provisioner = infraProvisionerMap[_.lowerCase(getInfrastructurePlatform(infra))]; return k8sList(StorageClassModel); }) .then((storageClasses: StorageClassResourceKind[]) => { diff --git a/frontend/packages/ceph-storage-plugin/src/selectors/index.ts b/frontend/packages/ceph-storage-plugin/src/selectors/index.ts index de5bb88b022..e24a1014bb4 100644 --- a/frontend/packages/ceph-storage-plugin/src/selectors/index.ts +++ b/frontend/packages/ceph-storage-plugin/src/selectors/index.ts @@ -32,6 +32,3 @@ export const getCephSC = (scData: K8sResourceKind[]): K8sResourceKind[] => _.get(sc, 'provisioner', '').includes(provisioner), ); }); - -export const getInfrastructurePlatform = (infrastructure: K8sResourceKind): string => - _.get(infrastructure, 'status.platform'); diff --git a/frontend/packages/console-plugin-sdk/src/typings/dashboards.ts b/frontend/packages/console-plugin-sdk/src/typings/dashboards.ts index 1133bab6f02..4aeae255359 100644 --- a/frontend/packages/console-plugin-sdk/src/typings/dashboards.ts +++ b/frontend/packages/console-plugin-sdk/src/typings/dashboards.ts @@ -13,7 +13,7 @@ import { LazyLoader } from './types'; namespace ExtensionProperties { interface DashboardExtension { /** Name of feature flag for this item. */ - required: string; + required: string | string[]; } interface DashboardsOverviewHealthSubsystem extends DashboardExtension { diff --git a/frontend/packages/console-shared/src/selectors/index.ts b/frontend/packages/console-shared/src/selectors/index.ts index 01e75f3d7c1..72780fd6e11 100644 --- a/frontend/packages/console-shared/src/selectors/index.ts +++ b/frontend/packages/console-shared/src/selectors/index.ts @@ -1,2 +1,3 @@ export * from './common'; export * from './machine'; +export * from './infrastructure'; diff --git a/frontend/packages/console-shared/src/selectors/infrastructure.ts b/frontend/packages/console-shared/src/selectors/infrastructure.ts new file mode 100644 index 00000000000..5a1caef21a2 --- /dev/null +++ b/frontend/packages/console-shared/src/selectors/infrastructure.ts @@ -0,0 +1,5 @@ +import * as _ from 'lodash'; +import { K8sResourceKind } from '@console/internal/module/k8s'; + +export const getInfrastructurePlatform = (infrastructure: K8sResourceKind): string => + _.get(infrastructure, 'status.platform'); diff --git a/frontend/packages/metal3-plugin/src/plugin.ts b/frontend/packages/metal3-plugin/src/plugin.ts index 3a69ff0fcdd..297b70606cc 100644 --- a/frontend/packages/metal3-plugin/src/plugin.ts +++ b/frontend/packages/metal3-plugin/src/plugin.ts @@ -10,6 +10,7 @@ import { } from '@console/plugin-sdk'; import { referenceForModel } from '@console/internal/module/k8s'; import { MachineModel, NodeModel } from '@console/internal/models'; +import { FLAGS } from '@console/internal/const'; import { BaremetalHostModel, NodeMaintenanceModel } from './models'; import { getBMHStatusGroups } from './components/dashboard/utils'; @@ -46,7 +47,7 @@ const plugin: Plugin = [ componentProps: { name: 'Bare Metal Hosts', resource: referenceForModel(BaremetalHostModel), - required: METAL3_FLAG, + required: [FLAGS.BAREMETAL, METAL3_FLAG], }, }, }, @@ -107,7 +108,7 @@ const plugin: Plugin = [ ], model: BaremetalHostModel, mapper: getBMHStatusGroups, - required: METAL3_FLAG, + required: [FLAGS.BAREMETAL, METAL3_FLAG], }, }, ]; diff --git a/frontend/packages/noobaa-storage-plugin/src/components/details-card/details-card.tsx b/frontend/packages/noobaa-storage-plugin/src/components/details-card/details-card.tsx index 5cd5e683478..65bed644be3 100644 --- a/frontend/packages/noobaa-storage-plugin/src/components/details-card/details-card.tsx +++ b/frontend/packages/noobaa-storage-plugin/src/components/details-card/details-card.tsx @@ -1,5 +1,6 @@ import * as React from 'react'; import * as _ from 'lodash'; +import { getInfrastructurePlatform } from '@console/shared'; import { DashboardCard, DashboardCardBody, @@ -14,7 +15,6 @@ import { import { FirehoseResource, ExternalLink } from '@console/internal/components/utils'; import { InfrastructureModel, SubscriptionModel } from '@console/internal/models/index'; import { referenceForModel, K8sResourceKind } from '@console/internal/module/k8s'; -import { getInfrastructurePlatform } from '@console/ceph-storage-plugin/src/selectors'; import { getMetric } from '../../utils'; const NOOBAA_SYSTEM_NAME_QUERY = 'NooBaa_system_info'; diff --git a/frontend/public/actions/features.ts b/frontend/public/actions/features.ts index bb7b81519f7..5b093eb4be3 100644 --- a/frontend/public/actions/features.ts +++ b/frontend/public/actions/features.ts @@ -1,9 +1,9 @@ import { Dispatch } from 'react-redux'; import * as _ from 'lodash-es'; import { ActionType as Action, action } from 'typesafe-actions'; - -import { OperatorGroupModel, PackageManifestModel, SelfSubjectAccessReviewModel } from '../models'; -import { k8sBasePath, ClusterVersionKind, k8sCreate } from '../module/k8s'; +import { getInfrastructurePlatform } from '@console/shared/src/selectors'; +import { OperatorGroupModel, PackageManifestModel, SelfSubjectAccessReviewModel, InfrastructureModel } from '../models'; +import { k8sBasePath, ClusterVersionKind, k8sCreate, k8sGet, K8sResourceKind } from '../module/k8s'; import { receivedResources } from './k8s'; import { coFetchJSON } from '../co-fetch'; import { MonitoringRoutes } from '../reducers/monitoring'; @@ -49,6 +49,16 @@ const detectOpenShift = dispatch => coFetchJSON(openshiftPath) : handleError(err, FLAGS.OPENSHIFT, dispatch, detectOpenShift) ); +const detectBaremetalPlatform = dispatch => + k8sGet(InfrastructureModel, 'cluster') + .then( + (infra: K8sResourceKind) => dispatch(setFlag(FLAGS.BAREMETAL, getInfrastructurePlatform(infra) === 'BareMetal')), + err => { + _.get(err, 'response.status') === 404 + ? dispatch(setFlag(FLAGS.BAREMETAL, false)) + : handleError(err, FLAGS.BAREMETAL, dispatch, detectBaremetalPlatform); + }); + const clusterVersionPath = `${k8sBasePath}/apis/config.openshift.io/v1/clusterversions/version`; const detectClusterVersion = dispatch => coFetchJSON(clusterVersionPath) .then( @@ -212,6 +222,8 @@ const ssarCheckActions = ssarChecks.map(({flag, resourceAttributes, after}) => { export const detectFeatures = () => (dispatch: Dispatch) => [ detectOpenShift, + // TODO(vojtech): move this flag definition to metal3-plugin via ActionFeatureFlag extension + detectBaremetalPlatform, detectCanCreateProject, detectMonitoringURLs, detectClusterVersion, diff --git a/frontend/public/components/dashboard/inventory-card/inventory-item.tsx b/frontend/public/components/dashboard/inventory-card/inventory-item.tsx index cb6ed3843d9..bb766e91b56 100644 --- a/frontend/public/components/dashboard/inventory-card/inventory-item.tsx +++ b/frontend/public/components/dashboard/inventory-card/inventory-item.tsx @@ -14,7 +14,7 @@ import { import { K8sResourceKind, K8sKind } from '../../../module/k8s'; import { InventoryStatusGroup } from './status-group'; import { connectToFlags, FlagsObject, WithFlagsProps } from '../../../reducers/features'; -import { getFlagsForExtensions } from '../../dashboards-page/utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from '../../dashboards-page/utils'; const defaultStatusGroupIcons = { [InventoryStatusGroup.OK]: ( @@ -36,7 +36,7 @@ const defaultStatusGroupIcons = { const getStatusGroupIcons = (flags: FlagsObject) => { const groupStatusIcons = {...defaultStatusGroupIcons}; - plugins.registry.getDashboardsInventoryItemGroups().filter(e => flags[e.properties.required]).forEach(group => { + plugins.registry.getDashboardsInventoryItemGroups().filter(e => isDashboardExtensionInUse(e, flags)).forEach(group => { if (!groupStatusIcons[group.properties.id]) { groupStatusIcons[group.properties.id] = group.properties.icon; } diff --git a/frontend/public/components/dashboards-page/dashboards.tsx b/frontend/public/components/dashboards-page/dashboards.tsx index 72e52d4a827..b0190a080d6 100644 --- a/frontend/public/components/dashboards-page/dashboards.tsx +++ b/frontend/public/components/dashboards-page/dashboards.tsx @@ -11,7 +11,7 @@ import { DashboardGrid, GridPosition, GridDashboardCard } from '../dashboard/gri import { DashboardsCard } from '@console/plugin-sdk'; import { featureReducerName, connectToFlags, FlagsObject, WithFlagsProps } from '../../reducers/features'; import { RootState } from '../../redux'; -import { getFlagsForExtensions } from './utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from './utils'; const getCardsOnPosition = (cards: DashboardsCard[], position: GridPosition): GridDashboardCard[] => cards.filter(c => c.properties.position === position).map(c => ({ @@ -20,8 +20,8 @@ const getCardsOnPosition = (cards: DashboardsCard[], position: GridPosition): Gr })); const getPluginTabPages = (flags: FlagsObject): Page[] => { - const cards = plugins.registry.getDashboardsCards().filter(e => flags[e.properties.required]); - return plugins.registry.getDashboardsTabs().filter(e => flags[e.properties.required]).map(tab => { + const cards = plugins.registry.getDashboardsCards().filter(e => isDashboardExtensionInUse(e, flags)); + return plugins.registry.getDashboardsTabs().filter(e => isDashboardExtensionInUse(e, flags)).map(tab => { const tabCards = cards.filter(c => c.properties.tab === tab.properties.id); return { href: tab.properties.id, diff --git a/frontend/public/components/dashboards-page/overview-dashboard/capacity-card.tsx b/frontend/public/components/dashboards-page/overview-dashboard/capacity-card.tsx index f422a216e31..72900d31a5f 100644 --- a/frontend/public/components/dashboards-page/overview-dashboard/capacity-card.tsx +++ b/frontend/public/components/dashboards-page/overview-dashboard/capacity-card.tsx @@ -14,7 +14,7 @@ import { humanizePercentage, humanizeDecimalBytesPerSec, humanizeBinaryBytesWith import { getInstantVectorStats, getRangeVectorStats, GetStats } from '../../graphs/utils'; import { OverviewQuery, capacityQueries } from './queries'; import { connectToFlags, FlagsObject, WithFlagsProps } from '../../../reducers/features'; -import { getFlagsForExtensions } from '../utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from '../utils'; const getLastStats = (response, getStats: GetStats): React.ReactText => { const stats = getStats(response); @@ -23,7 +23,7 @@ const getLastStats = (response, getStats: GetStats): React.ReactText => { const getQueries = (flags: FlagsObject) => { const pluginQueries = {}; - plugins.registry.getDashboardsOverviewQueries().filter(e => flags[e.properties.required]).forEach(pluginQuery => { + plugins.registry.getDashboardsOverviewQueries().filter(e => isDashboardExtensionInUse(e, flags)).forEach(pluginQuery => { const queryKey = pluginQuery.properties.queryKey; if (!pluginQueries[queryKey]) { pluginQueries[queryKey] = pluginQuery.properties.query; diff --git a/frontend/public/components/dashboards-page/overview-dashboard/details-card.tsx b/frontend/public/components/dashboards-page/overview-dashboard/details-card.tsx index ba005005ded..4c25b1d8c23 100644 --- a/frontend/public/components/dashboards-page/overview-dashboard/details-card.tsx +++ b/frontend/public/components/dashboards-page/overview-dashboard/details-card.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import * as _ from 'lodash-es'; import { connect } from 'react-redux'; - +import { getInfrastructurePlatform } from '@console/shared'; import { DashboardCard, DashboardCardBody, @@ -17,8 +17,6 @@ import { flagPending, featureReducerName } from '../../../reducers/features'; import { FirehoseResource } from '../../utils'; import { RootState } from '../../../redux'; -const getInfrastructurePlatform = (infrastructure: K8sResourceKind): string => _.get(infrastructure, 'status.platform'); - const clusterVersionResource: FirehoseResource = { kind: referenceForModel(ClusterVersionModel), namespaced: false, diff --git a/frontend/public/components/dashboards-page/overview-dashboard/health-card.tsx b/frontend/public/components/dashboards-page/overview-dashboard/health-card.tsx index b6953c17cd5..f9a2fb3cf98 100644 --- a/frontend/public/components/dashboards-page/overview-dashboard/health-card.tsx +++ b/frontend/public/components/dashboards-page/overview-dashboard/health-card.tsx @@ -17,7 +17,7 @@ import { DashboardItemProps, withDashboardResources } from '../with-dashboard-re import { getBrandingDetails } from '../../masthead'; import { RootState } from '../../../redux'; import { connectToFlags, flagPending, featureReducerName, FlagsObject, WithFlagsProps } from '../../../reducers/features'; -import { getFlagsForExtensions } from '../utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from '../utils'; import { uniqueResource } from './utils'; import { isDashboardsOverviewHealthURLSubsystem, isDashboardsOverviewHealthPrometheusSubsystem } from '@console/plugin-sdk'; @@ -70,7 +70,7 @@ const mapStateToProps = (state: RootState) => ({ }); const getSubsystems = (flags: FlagsObject) => - plugins.registry.getDashboardsOverviewHealthSubsystems().filter(e => flags[e.properties.required]); + plugins.registry.getDashboardsOverviewHealthSubsystems().filter(e => isDashboardExtensionInUse(e, flags)); const HealthCard_ = connect(mapStateToProps)(({ watchURL, diff --git a/frontend/public/components/dashboards-page/overview-dashboard/inventory-card.tsx b/frontend/public/components/dashboards-page/overview-dashboard/inventory-card.tsx index 2aed3d64110..6294251979b 100644 --- a/frontend/public/components/dashboards-page/overview-dashboard/inventory-card.tsx +++ b/frontend/public/components/dashboards-page/overview-dashboard/inventory-card.tsx @@ -15,7 +15,7 @@ import { K8sResourceKind, PodKind } from '../../../module/k8s'; import { getPodStatusGroups, getNodeStatusGroups, getPVCStatusGroups } from '../../dashboard/inventory-card/utils'; import { FirehoseResource } from '../../utils'; import { connectToFlags, FlagsObject, WithFlagsProps } from '../../../reducers/features'; -import { getFlagsForExtensions } from '../utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from '../utils'; import { uniqueResource } from './utils'; import { InventoryBody } from '../../dashboard/inventory-card/inventory-body'; @@ -38,7 +38,7 @@ const k8sResources: FirehoseResource[] = [ ]; const getItems = (flags: FlagsObject) => - plugins.registry.getDashboardsOverviewInventoryItems().filter(e => flags[e.properties.required]); + plugins.registry.getDashboardsOverviewInventoryItems().filter(e => isDashboardExtensionInUse(e, flags)); const getResourcesToWatch = (flags: FlagsObject): FirehoseResource[] => { const allResources = [...k8sResources]; diff --git a/frontend/public/components/dashboards-page/overview-dashboard/top-consumers-card.tsx b/frontend/public/components/dashboards-page/overview-dashboard/top-consumers-card.tsx index f413e2c4c7c..7fac21be2c1 100644 --- a/frontend/public/components/dashboards-page/overview-dashboard/top-consumers-card.tsx +++ b/frontend/public/components/dashboards-page/overview-dashboard/top-consumers-card.tsx @@ -27,7 +27,7 @@ import { MonitoringRoutes, connectToURLs } from '../../../reducers/monitoring'; import { getPrometheusExpressionBrowserURL } from '../../graphs/prometheus-graph'; import { getName, getNamespace } from '@console/shared'; import { connectToFlags, FlagsObject, WithFlagsProps } from '../../../reducers/features'; -import { getFlagsForExtensions } from '../utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from '../utils'; const topConsumersQueryMap: TopConsumersMap = { [PODS]: { @@ -53,7 +53,7 @@ const topConsumersQueryMap: TopConsumersMap = { const getTopConsumersQueries = (flags: FlagsObject): TopConsumersMap => { const topConsumers = {...topConsumersQueryMap}; - plugins.registry.getDashboardsOverviewTopConsumerItems().filter(e => flags[e.properties.required]).forEach(pluginItem => { + plugins.registry.getDashboardsOverviewTopConsumerItems().filter(e => isDashboardExtensionInUse(e, flags)).forEach(pluginItem => { if (!topConsumers[pluginItem.properties.name]) { topConsumers[pluginItem.properties.name] = { model: pluginItem.properties.model, diff --git a/frontend/public/components/dashboards-page/overview-dashboard/utilization-card.tsx b/frontend/public/components/dashboards-page/overview-dashboard/utilization-card.tsx index e868fddf7e2..b6872a18f19 100644 --- a/frontend/public/components/dashboards-page/overview-dashboard/utilization-card.tsx +++ b/frontend/public/components/dashboards-page/overview-dashboard/utilization-card.tsx @@ -14,11 +14,11 @@ import { getRangeVectorStats } from '../../graphs/utils'; import { humanizePercentage, humanizeBinaryBytesWithoutB } from '../../utils'; import { OverviewQuery, utilizationQueries } from './queries'; import { connectToFlags, FlagsObject, WithFlagsProps } from '../../../reducers/features'; -import { getFlagsForExtensions } from '../utils'; +import { getFlagsForExtensions, isDashboardExtensionInUse } from '../utils'; const getQueries = (flags: FlagsObject) => { const pluginQueries = {}; - plugins.registry.getDashboardsOverviewQueries().filter(e => flags[e.properties.required]).forEach(pluginQuery => { + plugins.registry.getDashboardsOverviewQueries().filter(e => isDashboardExtensionInUse(e, flags)).forEach(pluginQuery => { const queryKey = pluginQuery.properties.queryKey; if (!pluginQueries[queryKey]) { pluginQueries[queryKey] = pluginQuery.properties.query; @@ -28,7 +28,7 @@ const getQueries = (flags: FlagsObject) => { }; const getItems = (flags: FlagsObject) => - plugins.registry.getDashboardsOverviewUtilizationItems().filter(e => flags[e.properties.required]); + plugins.registry.getDashboardsOverviewUtilizationItems().filter(e => isDashboardExtensionInUse(e, flags)); const UtilizationCard_: React.FC = ({ watchPrometheus, diff --git a/frontend/public/components/dashboards-page/utils.ts b/frontend/public/components/dashboards-page/utils.ts index fa12152591e..8da666f4cee 100644 --- a/frontend/public/components/dashboards-page/utils.ts +++ b/frontend/public/components/dashboards-page/utils.ts @@ -1,4 +1,16 @@ +import * as _ from 'lodash'; import { Extension } from '@console/plugin-sdk'; +import { FlagsObject } from '@console/internal/reducers/features'; -export const getFlagsForExtensions = (extensions: Extension<{required: string}>[]): string[] => - extensions.map(e => e.properties.required).filter((value, index, self) => self.indexOf(value) === index); +type DashboardExtension = Extension<{ required: string | string[] }>; + +export const getFlagsForExtensions = (extensions: DashboardExtension[]): string[] => + extensions.reduce( + (requiredFlags, e) => _.uniq([...requiredFlags, ..._.castArray(e.properties.required)]), + [] as string[], + ); + +export const isDashboardExtensionInUse = (e: DashboardExtension, flags: FlagsObject) => { + const requiredFlags = _.castArray(e.properties.required); + return _.every(requiredFlags, (f) => flags[f]); +}; diff --git a/frontend/public/const.ts b/frontend/public/const.ts index b91ccecafe8..05e3ad4ef6c 100644 --- a/frontend/public/const.ts +++ b/frontend/public/const.ts @@ -71,4 +71,5 @@ export enum FLAGS { CONSOLE_CLI_DOWNLOAD = 'CONSOLE_CLI_DOWNLOAD', CONSOLE_NOTIFICATION = 'CONSOLE_NOTIFICATION', CONSOLE_EXTERNAL_LOG_LINK = 'CONSOLE_EXTERNAL_LOG_LINK', + BAREMETAL = 'BAREMETAL', }