Skip to content

Commit

Permalink
Merge pull request #9774 from invincibleJai/bz-1991977
Browse files Browse the repository at this point in the history
Bug 1991977: fetch kamelets form both current namespace and global namespace where operator is installed
  • Loading branch information
openshift-merge-robot committed Aug 23, 2021
2 parents 0eb4820 + 276e9d4 commit 4344dec
Show file tree
Hide file tree
Showing 5 changed files with 68 additions and 16 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,11 @@ import * as React from 'react';
import { TFunction } from 'i18next';
import { useTranslation } from 'react-i18next';
import { CatalogItem, ExtensionHook } from '@console/dynamic-plugin-sdk';
import {
useK8sWatchResource,
WatchK8sResource,
} from '@console/internal/components/utils/k8s-watch-hook';
import { useAccessReview } from '@console/internal/components/utils/rbac';
import { K8sResourceKind, referenceForModel } from '@console/internal/module/k8s';
import { K8sResourceKind } from '@console/internal/module/k8s';
import { CAMEL_K_PROVIDER_ANNOTATION, CAMEL_K_TYPE_LABEL } from '../const';
import { CamelKameletBindingModel, CamelKameletModel } from '../models';
import { useKameletsData } from '../hooks/useKameletsData';
import { CamelKameletBindingModel } from '../models';
import { getEventSourceIcon } from '../utils/get-knative-icon';

const normalizeKamelets = (
Expand Down Expand Up @@ -52,13 +49,8 @@ const useKameletsProvider: ExtensionHook<CatalogItem[]> = ({
verb: 'create',
namespace,
});
const resource: WatchK8sResource = React.useMemo(
() => ({ kind: referenceForModel(CamelKameletModel), isList: true, namespace, optional: true }),
[namespace],
);
const [kamelets, kameletsLoaded, kameletsLoadError] = useK8sWatchResource<K8sResourceKind[]>(
resource,
);
const [kamelets, kameletsLoaded, kameletsLoadError] = useKameletsData(namespace);

const normalizedSource = React.useMemo(() => {
if (!kameletsLoaded || !canCreateKameletBinding) return [];
const kameletSource = kamelets.filter(
Expand Down
1 change: 1 addition & 0 deletions frontend/packages/knative-plugin/src/const.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,4 @@ export const KNATIVE_CONCURRENCYTARGET_ANNOTATION = `${KNATIVE_AUTOSCALING_APIGR
export const KNATIVE_CONCURRENCYUTILIZATION_ANNOTATION = `${KNATIVE_AUTOSCALING_APIGROUP}/targetUtilizationPercentage`;
export const KNATIVE_AUTOSCALEWINDOW_ANNOTATION = `${KNATIVE_AUTOSCALING_APIGROUP}/window`;
export const SERVERLESS_FUNCTION_LABEL = 'boson.dev/function';
export const GLOBAL_OPERATOR_NS = 'openshift-operators';
1 change: 1 addition & 0 deletions frontend/packages/knative-plugin/src/hooks/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
export * from './useEventSourceModelsWithAccess';
export * from './useEventSourceStatus';
export * from './useKameletsData';
15 changes: 12 additions & 3 deletions frontend/packages/knative-plugin/src/hooks/useEventSourceStatus.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { useAccessReview2 } from '@console/internal/components/utils';
import { useK8sGet } from '@console/internal/components/utils/k8s-get-hook';
import { K8sKind, K8sResourceKind } from '@console/internal/module/k8s';
import { EventSourceMetaData } from '../components/add/import-types';
import { GLOBAL_OPERATOR_NS } from '../const';
import { CamelKameletBindingModel, CamelKameletModel } from '../models';
import { getEventSourceMetadata, getKameletMetadata } from '../utils/create-eventsources-utils';
import { useEventSourceModels } from '../utils/fetch-dynamic-eventsources-utils';
Expand All @@ -22,11 +23,19 @@ export const useEventSourceStatus = (
} => {
const { t } = useTranslation();
const { eventSourceModels, loaded: eventSourceModelsLoaded } = useEventSourceModels();
const [kamelet, kameletLoaded] = useK8sGet<K8sResourceKind>(
const [kameletNs, kameletNsLoaded] = useK8sGet<K8sResourceKind>(
CamelKameletModel,
kameletName,
namespace,
);
const [kameletGlobalNs, kameletGlobalNsLoaded] = useK8sGet<K8sResourceKind>(
CamelKameletModel,
kameletName,
GLOBAL_OPERATOR_NS,
);

const kameletLoaded = kameletNsLoaded && kameletGlobalNsLoaded;
const kamelet = kameletLoaded && (kameletNs || kameletGlobalNs);

const isKameletSource = kameletName && sourceKindProp === CamelKameletBindingModel.kind;
const isSourceKindPresent = sourceKindProp || isKameletSource;
Expand Down Expand Up @@ -61,11 +70,11 @@ export const useEventSourceStatus = (
};
}, [
isSourceKindPresent,
eventSourceModelsLoaded,
eventSourceModel,
kameletLoaded,
kamelet,
isKameletSource,
eventSourceModel,
eventSourceModelsLoaded,
t,
]);

Expand Down
49 changes: 49 additions & 0 deletions frontend/packages/knative-plugin/src/hooks/useKameletsData.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import * as React from 'react';
import { useK8sWatchResources } from '@console/internal/components/utils/k8s-watch-hook';
import { K8sResourceKind, referenceForModel } from '@console/internal/module/k8s';
import { GLOBAL_OPERATOR_NS } from '../const';
import { CamelKameletModel } from '../models';

export const useKameletsData = (namespace: string): [K8sResourceKind[], boolean, any] => {
const [kamelets, setKamelets] = React.useState<K8sResourceKind[]>([]);
const [kameletsLoaded, setKameletsLoaded] = React.useState(false);
const [kameletsLoadError, setKameletsLoadError] = React.useState(null);

const watchedResources = React.useMemo(
() => ({
kamelets: {
isList: true,
kind: referenceForModel(CamelKameletModel),
namespace,
optional: true,
},
kameletsGlobalNs: {
isList: true,
kind: referenceForModel(CamelKameletModel),
namespace: GLOBAL_OPERATOR_NS,
optional: true,
},
}),
[namespace],
);

const extraResources = useK8sWatchResources<{
[key: string]: K8sResourceKind[];
}>(watchedResources);

React.useEffect(() => {
const resDataLoaded = Object.keys(extraResources).every((key) => extraResources[key].loaded);
const resDataloadError = Object.keys(extraResources).every(
(key) => extraResources[key].loadError,
);
const { kamelets: kameletsData, kameletsGlobalNs } = extraResources;
if (resDataLoaded) {
setKamelets(kameletsData.data.length > 0 ? kameletsData.data : kameletsGlobalNs.data);
setKameletsLoaded(kameletsData.loaded || kameletsGlobalNs.loaded);
} else if (resDataloadError) {
setKameletsLoadError(kameletsGlobalNs.loadError || kameletsGlobalNs.loadError);
}
}, [extraResources]);

return [kamelets, kameletsLoaded, kameletsLoadError];
};

0 comments on commit 4344dec

Please sign in to comment.