Skip to content

Commit 5d3de21

Browse files
Timothy AsirTimothy Asir Jeyasingh
authored andcommitted
Fix DR Status is not displayed for discovered apps in Virtual Machine page
https://issues.redhat.com/browse/DFBUGS-2822 https://issues.redhat.com/browse/DFBUGS-2823 Signed-off-by: Timothy Asir Jeyasingh <[email protected]>
1 parent 84da487 commit 5d3de21

File tree

5 files changed

+48
-63
lines changed

5 files changed

+48
-63
lines changed

packages/mco/components/dr-status-popover/parsers/virtualmachine-parser.tsx

Lines changed: 42 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
import * as React from 'react';
2-
import {
3-
DISCOVERED_APP_NS,
4-
KUBE_INSTANCE_LABEL,
5-
ODF_RESOURCE_TYPE_LABEL,
6-
} from '@odf/mco/constants';
2+
import { DISCOVERED_APP_NS, KUBE_INSTANCE_LABEL } from '@odf/mco/constants';
73
import {
84
getApplicationResourceObj,
95
getApplicationSetResourceObj,
@@ -27,19 +23,45 @@ import {
2723
getLabel,
2824
getName,
2925
getNamespace,
30-
VirtualMachineModel,
3126
} from '@odf/shared';
3227
import {
3328
K8sResourceCommon,
3429
useK8sWatchResource,
3530
} from '@openshift-console/dynamic-plugin-sdk';
36-
import { findDRPCUsingVM } from '../../modals/app-manage-policies/utils/parser-utils';
3731
import {
3832
ApplicationSetParser,
3933
SubscriptionParser,
4034
DiscoveredParser,
4135
} from '../parsers';
4236

37+
const findDRPCByNamespaceAndCluster = (
38+
drpcs: DRPlacementControlKind[],
39+
namespace: string,
40+
cluster: string
41+
): DRPlacementControlKind | undefined =>
42+
drpcs.find(
43+
(drpc) =>
44+
drpc?.spec?.protectedNamespaces?.includes(namespace) &&
45+
drpc?.spec?.preferredCluster === cluster
46+
);
47+
48+
const useMatchingDRPC = (
49+
namespace: string,
50+
cluster: string
51+
): DRPlacementControlKind | undefined => {
52+
const drpcWatchResource = React.useMemo(
53+
() => getDRPlacementControlResourceObj({ namespace: DISCOVERED_APP_NS }),
54+
[]
55+
);
56+
57+
const [drpcs, loaded, loadError] =
58+
useK8sWatchResource<DRPlacementControlKind[]>(drpcWatchResource);
59+
60+
if (!loaded || loadError) return undefined;
61+
62+
return findDRPCByNamespaceAndCluster(drpcs, namespace, cluster);
63+
};
64+
4365
const ApplicationSetHelper: React.FC<ParserHelperProps> = ({
4466
vmName,
4567
vmNamespace,
@@ -65,32 +87,9 @@ const SubscriptionHelper: React.FC<ParserHelperProps> = ({
6587
return <SubscriptionParser application={resource} />;
6688
};
6789

68-
const DiscoveredHelper: React.FC<ParserHelperProps> = ({
69-
vmName,
70-
vmNamespace,
71-
clusterName,
72-
}) => {
73-
const [drpcs, loaded, loadError] = useK8sWatchResource<
74-
DRPlacementControlKind[]
75-
>(
76-
getDRPlacementControlResourceObj({
77-
namespace: DISCOVERED_APP_NS,
78-
selector: {
79-
matchLabels: {
80-
// To optimize the VM DRPC watch
81-
[ODF_RESOURCE_TYPE_LABEL]: VirtualMachineModel.kind.toLowerCase(),
82-
},
83-
},
84-
})
85-
);
86-
87-
const drpc = React.useMemo(
88-
() => findDRPCUsingVM(drpcs, vmName, vmNamespace, clusterName),
89-
[vmName, vmNamespace, drpcs, clusterName]
90-
);
91-
92-
if (!loaded || loadError || !drpc) return null;
93-
return <DiscoveredParser application={drpc} />;
90+
const DiscoveredHelper: React.FC<DiscoveredHelperProps> = ({ application }) => {
91+
if (!application) return null;
92+
return <DiscoveredParser application={application} />;
9493
};
9594

9695
export const VirtualMachineParser: React.FC<VirtualMachineParserProps> = ({
@@ -109,10 +108,13 @@ export const VirtualMachineParser: React.FC<VirtualMachineParserProps> = ({
109108
: querySubscriptionResourcesForVM(vmName, vmNamespace, clusterName),
110109
[vmName, vmNamespace, clusterName, argoApplicationName]
111110
);
112-
113111
const [searchResult] = useACMSafeFetch(searchQuery);
112+
const matchedDRPC = useMatchingDRPC(vmNamespace, clusterName);
113+
114+
if (matchedDRPC && matchedDRPC.spec && matchedDRPC.metadata?.name) {
115+
return <DiscoveredHelper application={matchedDRPC} />;
116+
}
114117

115-
// Extract managed application CR (Application / ApplicationSet)
116118
const managedApplication: SearchResultItemType =
117119
searchResult?.data?.searchResult?.[0]?.related?.[0]?.items?.[0];
118120

@@ -131,13 +133,7 @@ export const VirtualMachineParser: React.FC<VirtualMachineParserProps> = ({
131133
);
132134
}
133135

134-
return (
135-
<DiscoveredHelper
136-
vmName={vmName}
137-
vmNamespace={vmNamespace}
138-
clusterName={clusterName}
139-
/>
140-
);
136+
return null;
141137
};
142138

143139
type VirtualMachineParserProps = {
@@ -147,7 +143,10 @@ type VirtualMachineParserProps = {
147143
type ParserHelperProps = {
148144
vmName: string;
149145
vmNamespace: string;
150-
clusterName?: string;
146+
};
147+
148+
type DiscoveredHelperProps = {
149+
application: DRPlacementControlKind | undefined;
151150
};
152151

153152
export default VirtualMachineParser;

packages/mco/components/modals/app-manage-policies/parsers/discovered-vm-parser.tsx

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
import * as React from 'react';
22
import { getPlacementKindObj } from '@odf/mco/components/discovered-application-wizard/utils/k8s-utils';
3-
import {
4-
DISCOVERED_APP_NS,
5-
DRApplication,
6-
ODF_RESOURCE_TYPE_LABEL,
7-
} from '@odf/mco/constants';
3+
import { DISCOVERED_APP_NS, DRApplication } from '@odf/mco/constants';
84
import {
95
getDRPlacementControlResourceObj,
106
getDRPolicyResourceObj,
@@ -16,7 +12,7 @@ import {
1612
getSearchResultItems,
1713
queryAppWorkloadPVCs,
1814
} from '@odf/mco/utils';
19-
import { getName, getNamespace, VirtualMachineModel } from '@odf/shared';
15+
import { getName, getNamespace } from '@odf/shared';
2016
import {
2117
K8sResourceCommon,
2218
useK8sWatchResource,
@@ -53,12 +49,6 @@ export const DiscoveredVMParser: React.FC<DiscoveredVMParserProps> = ({
5349
>(
5450
getDRPlacementControlResourceObj({
5551
namespace: DISCOVERED_APP_NS,
56-
selector: {
57-
matchLabels: {
58-
// To optimize the VM DRPC watch
59-
[ODF_RESOURCE_TYPE_LABEL]: VirtualMachineModel.kind.toLowerCase(),
60-
},
61-
},
6252
})
6353
);
6454

packages/mco/components/modals/app-manage-policies/utils/k8s-utils.ts

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@ import {
1313
PVC_RESOURCE_SELECTOR,
1414
PROTECTED_VMS,
1515
VM_RECIPE_NAME,
16-
ODF_RESOURCE_TYPE_LABEL,
1716
K8S_RESOURCE_SELECTOR_LABEL_KEY,
1817
IS_CG_ENABLED_ANNOTATION,
1918
} from '@odf/mco/constants';
@@ -471,9 +470,6 @@ export const assignPromisesForDiscovered = async (
471470
[PVC_RESOURCE_SELECTOR]: [protectionName],
472471
[PROTECTED_VMS]: [vmName],
473472
},
474-
labels: {
475-
[ODF_RESOURCE_TYPE_LABEL]: VirtualMachineModel.kind.toLowerCase(),
476-
},
477473
annotations,
478474
}),
479475
}),

packages/mco/components/modals/app-manage-policies/utils/parser-utils.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,10 @@ export const findDRPCUsingVM = (
180180
): DRPlacementControlKind | undefined =>
181181
drpcs.find(
182182
(drpc) =>
183-
getVMNamesFromRecipe(drpc.spec).includes(vmName) &&
183+
(getVMNamesFromRecipe(drpc.spec).includes(vmName) ||
184+
(
185+
drpc.status?.resourceConditions?.resourceMeta?.protectedpvcs || []
186+
).some((pvc) => pvc.startsWith(vmName))) &&
184187
drpc.spec?.protectedNamespaces?.includes(vmNamespace) &&
185188
getPrimaryClusterName(drpc) === cluster
186189
);

packages/mco/constants/common.ts

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,3 @@ export const ADMIN_FLAG = 'ADMIN';
2323
export const DISCOVERED_APP_NS = 'openshift-dr-ops';
2424

2525
export const NAME_NAMESPACE_SPLIT_CHAR = '/';
26-
27-
// Console search optimization selector
28-
export const ODF_RESOURCE_TYPE_LABEL = 'odf.console.selector/resourcetype';

0 commit comments

Comments
 (0)