@terasky/backstage-plugin-vcf-automation 1.14.1 → 1.15.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/VCFAutomationCCINamespaceOverview.esm.js +1 -5
- package/dist/components/VCFAutomationCCINamespaceOverview.esm.js.map +1 -1
- package/dist/components/VCFAutomationCCIResourceDetails.esm.js +28 -34
- package/dist/components/VCFAutomationCCIResourceDetails.esm.js.map +1 -1
- package/dist/components/VCFAutomationCCIResourceOverview.esm.js +33 -35
- package/dist/components/VCFAutomationCCIResourceOverview.esm.js.map +1 -1
- package/dist/components/VCFAutomationDeploymentDetails.esm.js +2 -2
- package/dist/components/VCFAutomationDeploymentDetails.esm.js.map +1 -1
- package/dist/components/VCFAutomationGenericResourceOverview.esm.js +4 -4
- package/dist/components/VCFAutomationGenericResourceOverview.esm.js.map +1 -1
- package/dist/components/VCFAutomationVMPowerManagement.esm.js +23 -23
- package/dist/components/VCFAutomationVMPowerManagement.esm.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/package.json +12 -11
|
@@ -49,11 +49,7 @@ const VCFAutomationCCINamespaceOverview = () => {
|
|
|
49
49
|
isStandalone: origin === "SUPERVISOR_NAMESPACE",
|
|
50
50
|
origin: origin || ""
|
|
51
51
|
};
|
|
52
|
-
}, [
|
|
53
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-properties"],
|
|
54
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-supervisor-namespace-data"],
|
|
55
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-origin"]
|
|
56
|
-
]);
|
|
52
|
+
}, [entity.metadata.annotations]);
|
|
57
53
|
const needsApiCall = !annotationData.namespaceData;
|
|
58
54
|
const { value: apiNamespaceData, loading, error } = useAsync(async () => {
|
|
59
55
|
if (!needsApiCall || !resourceId) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCFAutomationCCINamespaceOverview.esm.js","sources":["../../src/components/VCFAutomationCCINamespaceOverview.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport {\n InfoCard,\n StructuredMetadataTable,\n StatusOK,\n StatusError,\n StatusPending,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport { Grid, Typography, Chip, Box } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useAsync from 'react-use/lib/useAsync';\n\nconst useStyles = makeStyles(theme => ({\n statusChip: {\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n },\n conditionChip: {\n margin: theme.spacing(0.25),\n },\n}));\n\nexport const VCFAutomationCCINamespaceOverview = () => {\n const classes = useStyles();\n const { entity } = useEntity();\n const api = useApi(vcfAutomationApiRef);\n\n // Extract stable values from entity\n const deploymentId = entity.spec?.system as string;\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n // Parse annotation data once using useMemo\n const annotationData = useMemo(() => {\n const resourceProperties = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'];\n const supervisorNamespaceData = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-supervisor-namespace-data'];\n const origin = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'];\n \n let namespaceData = null;\n \n // For standalone namespaces, use supervisor namespace data\n if (supervisorNamespaceData && supervisorNamespaceData !== '{}') {\n try {\n namespaceData = JSON.parse(supervisorNamespaceData);\n } catch (e) {\n // Keep null if parsing fails\n }\n }\n \n // For deployment-managed namespaces, use resource properties\n if (!namespaceData && resourceProperties && resourceProperties !== '{}') {\n try {\n namespaceData = JSON.parse(resourceProperties);\n } catch (e) {\n // Keep null if parsing fails\n }\n }\n \n return {\n namespaceData,\n isStandalone: origin === 'SUPERVISOR_NAMESPACE',\n origin: origin || '',\n };\n }, [\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-supervisor-namespace-data'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'],\n ]);\n\n // Check if we need to make API call\n const needsApiCall = !annotationData.namespaceData;\n\n // Fallback API call if annotation data is missing or empty\n const { value: apiNamespaceData, loading, error } = useAsync(async () => {\n if (!needsApiCall || !resourceId) {\n return null;\n }\n\n try {\n // For standalone namespaces, fetch supervisor namespace directly\n if (annotationData.isStandalone) {\n const response = await api.getSupervisorNamespace(resourceId, instanceName);\n return response;\n }\n \n // For deployment-managed namespaces, fetch from deployment resources\n if (!deploymentId) {\n return null;\n }\n \n const response = await api.getDeploymentResources(deploymentId, instanceName);\n let resources = null;\n if (response) {\n // Handle both direct array and paginated response with content wrapper\n if (Array.isArray(response)) {\n resources = response;\n } else if (response.content && Array.isArray(response.content)) {\n resources = response.content;\n }\n }\n if (resources) {\n return resources.find((r: any) => r.id === resourceId);\n }\n return null;\n } catch (apiError) {\n console.error('Failed to fetch namespace data:', apiError);\n return null;\n }\n }, [needsApiCall, deploymentId, resourceId, instanceName, annotationData.isStandalone]);\n\n // Determine final data to use\n const namespaceData = annotationData.namespaceData || apiNamespaceData;\n\n if (loading) {\n return (\n <InfoCard title={`CCI Supervisor Namespace${annotationData.isStandalone ? ' (Standalone)' : ''}`}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!namespaceData) {\n return (\n <InfoCard title={`CCI Supervisor Namespace${annotationData.isStandalone ? ' (Standalone)' : ''}`}>\n <Typography>No namespace data available.</Typography>\n </InfoCard>\n );\n }\n\n const { status, metadata } = namespaceData;\n\n const renderStatusIcon = (conditionStatus: string) => {\n switch (conditionStatus.toLowerCase()) {\n case 'true':\n return <StatusOK />;\n case 'false':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n const basicInfo = {\n 'Namespace Name': namespaceData.name,\n 'Resource Link': namespaceData.resourceLink,\n 'Phase': status?.phase || 'Unknown',\n 'Endpoint URL': status?.namespaceEndpointURL || 'Not available',\n 'Infrastructure ID': metadata?.['infrastructure.cci.vmware.com/id'] || 'Not available',\n 'Project ID': metadata?.['infrastructure.cci.vmware.com/project-id'] || 'Not available',\n };\n\n return (\n <InfoCard title={`CCI Supervisor Namespace Overview${annotationData.isStandalone ? ' (Standalone)' : ''}`}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Basic Information\n </Typography>\n <StructuredMetadataTable metadata={basicInfo} />\n </Grid>\n\n {status?.conditions && status.conditions.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Conditions\n </Typography>\n <Box>\n {status.conditions.map((condition: any, index: number) => (\n <Box key={index} display=\"flex\" alignItems=\"center\" mb={1}>\n {renderStatusIcon(condition.status)}\n <Chip\n label={`${condition.type}: ${condition.status}`}\n size=\"small\"\n className={classes.conditionChip}\n color={condition.status === 'True' ? 'primary' : 'default'}\n />\n <Typography variant=\"caption\" style={{ marginLeft: 8 }}>\n {condition.lastTransitionTime}\n </Typography>\n </Box>\n ))}\n </Box>\n </Grid>\n )}\n\n {status?.vmClasses && status.vmClasses.length > 0 && (\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Available VM Classes\n </Typography>\n <Box>\n {status.vmClasses.map((vmClass: any, index: number) => (\n <Chip\n key={index}\n label={vmClass.name}\n size=\"small\"\n className={classes.statusChip}\n variant=\"outlined\"\n />\n ))}\n </Box>\n </Grid>\n )}\n\n {status?.storageClasses && status.storageClasses.length > 0 && (\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Storage Classes\n </Typography>\n <Box>\n {status.storageClasses.map((storageClass: any, index: number) => (\n <Box key={index} mb={1}>\n <Chip\n label={storageClass.name}\n size=\"small\"\n className={classes.statusChip}\n color=\"secondary\"\n />\n <Typography variant=\"caption\" display=\"block\">\n Limit: {storageClass.limit}\n </Typography>\n </Box>\n ))}\n </Box>\n </Grid>\n )}\n\n {status?.zones && status.zones.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Resource Zones\n </Typography>\n <Grid container spacing={2}>\n {status.zones.map((zone: any, index: number) => (\n <Grid item xs={12} md={6} key={index}>\n <InfoCard title={zone.name}>\n <StructuredMetadataTable\n metadata={{\n 'CPU Limit': zone.cpuLimit,\n 'CPU Reservation': zone.cpuReservation,\n 'Memory Limit': zone.memoryLimit,\n 'Memory Reservation': zone.memoryReservation,\n }}\n />\n </InfoCard>\n </Grid>\n ))}\n </Grid>\n </Grid>\n )}\n </Grid>\n </InfoCard>\n );\n};"],"names":["namespaceData","response"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VCFAutomationCCINamespaceOverview.esm.js","sources":["../../src/components/VCFAutomationCCINamespaceOverview.tsx"],"sourcesContent":["import { useMemo } from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { vcfAutomationApiRef } from '../api/VcfAutomationClient';\nimport {\n InfoCard,\n StructuredMetadataTable,\n StatusOK,\n StatusError,\n StatusPending,\n Progress,\n ResponseErrorPanel,\n} from '@backstage/core-components';\nimport { Grid, Typography, Chip, Box } from '@material-ui/core';\nimport { makeStyles } from '@material-ui/core/styles';\nimport useAsync from 'react-use/lib/useAsync';\n\nconst useStyles = makeStyles(theme => ({\n statusChip: {\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n },\n conditionChip: {\n margin: theme.spacing(0.25),\n },\n}));\n\nexport const VCFAutomationCCINamespaceOverview = () => {\n const classes = useStyles();\n const { entity } = useEntity();\n const api = useApi(vcfAutomationApiRef);\n\n // Extract stable values from entity\n const deploymentId = entity.spec?.system as string;\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n\n // Parse annotation data once using useMemo\n const annotationData = useMemo(() => {\n const resourceProperties = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'];\n const supervisorNamespaceData = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-supervisor-namespace-data'];\n const origin = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'];\n \n let namespaceData = null;\n \n // For standalone namespaces, use supervisor namespace data\n if (supervisorNamespaceData && supervisorNamespaceData !== '{}') {\n try {\n namespaceData = JSON.parse(supervisorNamespaceData);\n } catch (e) {\n // Keep null if parsing fails\n }\n }\n \n // For deployment-managed namespaces, use resource properties\n if (!namespaceData && resourceProperties && resourceProperties !== '{}') {\n try {\n namespaceData = JSON.parse(resourceProperties);\n } catch (e) {\n // Keep null if parsing fails\n }\n }\n \n return {\n namespaceData,\n isStandalone: origin === 'SUPERVISOR_NAMESPACE',\n origin: origin || '',\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entity.metadata.annotations]);\n\n // Check if we need to make API call\n const needsApiCall = !annotationData.namespaceData;\n\n // Fallback API call if annotation data is missing or empty\n const { value: apiNamespaceData, loading, error } = useAsync(async () => {\n if (!needsApiCall || !resourceId) {\n return null;\n }\n\n try {\n // For standalone namespaces, fetch supervisor namespace directly\n if (annotationData.isStandalone) {\n const response = await api.getSupervisorNamespace(resourceId, instanceName);\n return response;\n }\n \n // For deployment-managed namespaces, fetch from deployment resources\n if (!deploymentId) {\n return null;\n }\n \n const response = await api.getDeploymentResources(deploymentId, instanceName);\n let resources = null;\n if (response) {\n // Handle both direct array and paginated response with content wrapper\n if (Array.isArray(response)) {\n resources = response;\n } else if (response.content && Array.isArray(response.content)) {\n resources = response.content;\n }\n }\n if (resources) {\n return resources.find((r: any) => r.id === resourceId);\n }\n return null;\n } catch (apiError) {\n // eslint-disable-next-line no-console\n console.error('Failed to fetch namespace data:', apiError);\n return null;\n }\n }, [needsApiCall, deploymentId, resourceId, instanceName, annotationData.isStandalone]);\n\n // Determine final data to use\n const namespaceData = annotationData.namespaceData || apiNamespaceData;\n\n if (loading) {\n return (\n <InfoCard title={`CCI Supervisor Namespace${annotationData.isStandalone ? ' (Standalone)' : ''}`}>\n <Progress />\n </InfoCard>\n );\n }\n\n if (error) {\n return <ResponseErrorPanel error={error} />;\n }\n\n if (!namespaceData) {\n return (\n <InfoCard title={`CCI Supervisor Namespace${annotationData.isStandalone ? ' (Standalone)' : ''}`}>\n <Typography>No namespace data available.</Typography>\n </InfoCard>\n );\n }\n\n const { status, metadata } = namespaceData;\n\n const renderStatusIcon = (conditionStatus: string) => {\n switch (conditionStatus.toLowerCase()) {\n case 'true':\n return <StatusOK />;\n case 'false':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n const basicInfo = {\n 'Namespace Name': namespaceData.name,\n 'Resource Link': namespaceData.resourceLink,\n 'Phase': status?.phase || 'Unknown',\n 'Endpoint URL': status?.namespaceEndpointURL || 'Not available',\n 'Infrastructure ID': metadata?.['infrastructure.cci.vmware.com/id'] || 'Not available',\n 'Project ID': metadata?.['infrastructure.cci.vmware.com/project-id'] || 'Not available',\n };\n\n return (\n <InfoCard title={`CCI Supervisor Namespace Overview${annotationData.isStandalone ? ' (Standalone)' : ''}`}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Basic Information\n </Typography>\n <StructuredMetadataTable metadata={basicInfo} />\n </Grid>\n\n {status?.conditions && status.conditions.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Conditions\n </Typography>\n <Box>\n {status.conditions.map((condition: any, index: number) => (\n <Box key={index} display=\"flex\" alignItems=\"center\" mb={1}>\n {renderStatusIcon(condition.status)}\n <Chip\n label={`${condition.type}: ${condition.status}`}\n size=\"small\"\n className={classes.conditionChip}\n color={condition.status === 'True' ? 'primary' : 'default'}\n />\n <Typography variant=\"caption\" style={{ marginLeft: 8 }}>\n {condition.lastTransitionTime}\n </Typography>\n </Box>\n ))}\n </Box>\n </Grid>\n )}\n\n {status?.vmClasses && status.vmClasses.length > 0 && (\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Available VM Classes\n </Typography>\n <Box>\n {status.vmClasses.map((vmClass: any, index: number) => (\n <Chip\n key={index}\n label={vmClass.name}\n size=\"small\"\n className={classes.statusChip}\n variant=\"outlined\"\n />\n ))}\n </Box>\n </Grid>\n )}\n\n {status?.storageClasses && status.storageClasses.length > 0 && (\n <Grid item xs={12} md={6}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Storage Classes\n </Typography>\n <Box>\n {status.storageClasses.map((storageClass: any, index: number) => (\n <Box key={index} mb={1}>\n <Chip\n label={storageClass.name}\n size=\"small\"\n className={classes.statusChip}\n color=\"secondary\"\n />\n <Typography variant=\"caption\" display=\"block\">\n Limit: {storageClass.limit}\n </Typography>\n </Box>\n ))}\n </Box>\n </Grid>\n )}\n\n {status?.zones && status.zones.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Resource Zones\n </Typography>\n <Grid container spacing={2}>\n {status.zones.map((zone: any, index: number) => (\n <Grid item xs={12} md={6} key={index}>\n <InfoCard title={zone.name}>\n <StructuredMetadataTable\n metadata={{\n 'CPU Limit': zone.cpuLimit,\n 'CPU Reservation': zone.cpuReservation,\n 'Memory Limit': zone.memoryLimit,\n 'Memory Reservation': zone.memoryReservation,\n }}\n />\n </InfoCard>\n </Grid>\n ))}\n </Grid>\n </Grid>\n )}\n </Grid>\n </InfoCard>\n );\n};"],"names":["namespaceData","response"],"mappings":"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"}
|
|
@@ -128,16 +128,7 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
128
128
|
createdAt: createdAt2,
|
|
129
129
|
origin: origin2
|
|
130
130
|
};
|
|
131
|
-
}, [
|
|
132
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-properties"],
|
|
133
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-cci-resource-manifest"],
|
|
134
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-cci-resource-object"],
|
|
135
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-cci-resource-context"],
|
|
136
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-state"],
|
|
137
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-sync-status"],
|
|
138
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-created-at"],
|
|
139
|
-
entity.metadata.annotations?.["terasky.backstage.io/vcf-automation-resource-origin"]
|
|
140
|
-
]);
|
|
131
|
+
}, [entity.metadata.annotations]);
|
|
141
132
|
const needsApiCall = !annotationData.resourceData || !annotationData.manifest || !annotationData.objectData;
|
|
142
133
|
const { value: apiResourceData, loading, error } = useAsync(async () => {
|
|
143
134
|
if (!needsApiCall || !resourceId) {
|
|
@@ -226,8 +217,8 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
226
217
|
if (parentEntity) {
|
|
227
218
|
return await findCCINamespaceParent(parentEntity, depth + 1);
|
|
228
219
|
}
|
|
229
|
-
} catch (
|
|
230
|
-
console.warn("Failed to fetch parent entity:", parentRef,
|
|
220
|
+
} catch (caughtError) {
|
|
221
|
+
console.warn("Failed to fetch parent entity:", parentRef, caughtError);
|
|
231
222
|
}
|
|
232
223
|
return void 0;
|
|
233
224
|
}, [catalogApi, extractNamespaceUrnId]);
|
|
@@ -237,15 +228,14 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
237
228
|
let contextData = null;
|
|
238
229
|
try {
|
|
239
230
|
contextData = typeof resourceContext === "string" ? JSON.parse(resourceContext || "{}") : resourceContext;
|
|
240
|
-
} catch (
|
|
231
|
+
} catch (caughtError) {
|
|
241
232
|
console.log("Debug - Resource context is not JSON, treating as string:", resourceContext);
|
|
242
233
|
contextData = null;
|
|
243
234
|
}
|
|
244
235
|
return contextData?.namespaceUrnId || namespaceName;
|
|
245
|
-
} else {
|
|
246
|
-
const urnId = await findCCINamespaceParent(entity);
|
|
247
|
-
return urnId || namespaceName;
|
|
248
236
|
}
|
|
237
|
+
const urnId = await findCCINamespaceParent(entity);
|
|
238
|
+
return urnId || namespaceName;
|
|
249
239
|
}, [namespaceName, resourceContext, isStandalone, entity, findCCINamespaceParent]);
|
|
250
240
|
const loadManifestForEditing = useCallback(async () => {
|
|
251
241
|
if (!canEditResource || !namespaceName || !resourceName || !namespaceUrnId || !apiVersion || !resourceKind) {
|
|
@@ -270,10 +260,10 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
270
260
|
});
|
|
271
261
|
setEditingYaml(yamlContent);
|
|
272
262
|
setYamlValidationError("");
|
|
273
|
-
} catch (
|
|
263
|
+
} catch (caughtError) {
|
|
274
264
|
setSnackbar({
|
|
275
265
|
open: true,
|
|
276
|
-
message: `Failed to fetch resource manifest: ${
|
|
266
|
+
message: `Failed to fetch resource manifest: ${caughtError instanceof Error ? caughtError.message : "Unknown error"}`,
|
|
277
267
|
severity: "error"
|
|
278
268
|
});
|
|
279
269
|
} finally {
|
|
@@ -285,8 +275,8 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
285
275
|
yaml.load(yamlString);
|
|
286
276
|
setYamlValidationError("");
|
|
287
277
|
return true;
|
|
288
|
-
} catch (
|
|
289
|
-
const errorMessage =
|
|
278
|
+
} catch (caughtError) {
|
|
279
|
+
const errorMessage = caughtError instanceof Error ? caughtError.message : "Invalid YAML syntax";
|
|
290
280
|
setYamlValidationError(errorMessage);
|
|
291
281
|
return false;
|
|
292
282
|
}
|
|
@@ -322,10 +312,10 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
322
312
|
severity: "success"
|
|
323
313
|
});
|
|
324
314
|
setTimeout(() => window.location.reload(), 1e3);
|
|
325
|
-
} catch (
|
|
315
|
+
} catch (caughtError) {
|
|
326
316
|
setSnackbar({
|
|
327
317
|
open: true,
|
|
328
|
-
message: `Failed to update resource manifest: ${
|
|
318
|
+
message: `Failed to update resource manifest: ${caughtError instanceof Error ? caughtError.message : "Unknown error"}`,
|
|
329
319
|
severity: "error"
|
|
330
320
|
});
|
|
331
321
|
} finally {
|
|
@@ -395,7 +385,7 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
395
385
|
noRefs: true,
|
|
396
386
|
sortKeys: false
|
|
397
387
|
});
|
|
398
|
-
} catch (
|
|
388
|
+
} catch (caughtError) {
|
|
399
389
|
return JSON.stringify(data, null, 2);
|
|
400
390
|
}
|
|
401
391
|
};
|
|
@@ -415,17 +405,17 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
415
405
|
const getManifestInfo = () => {
|
|
416
406
|
if (!manifest) return {};
|
|
417
407
|
const info = {};
|
|
418
|
-
if (manifest.kind) info
|
|
408
|
+
if (manifest.kind) info.Kind = manifest.kind;
|
|
419
409
|
if (manifest.apiVersion) info["API Version"] = manifest.apiVersion;
|
|
420
410
|
if (manifest.metadata?.name) info["Manifest Name"] = manifest.metadata.name;
|
|
421
|
-
if (manifest.metadata?.namespace) info
|
|
411
|
+
if (manifest.metadata?.namespace) info.Namespace = manifest.metadata.namespace;
|
|
422
412
|
if (manifest.metadata?.labels) {
|
|
423
413
|
const labelCount = Object.keys(manifest.metadata.labels).length;
|
|
424
|
-
info
|
|
414
|
+
info.Labels = `${labelCount} label(s)`;
|
|
425
415
|
}
|
|
426
416
|
if (manifest.metadata?.annotations) {
|
|
427
417
|
const annotationCount = Object.keys(manifest.metadata.annotations).length;
|
|
428
|
-
info
|
|
418
|
+
info.Annotations = `${annotationCount} annotation(s)`;
|
|
429
419
|
}
|
|
430
420
|
return info;
|
|
431
421
|
};
|
|
@@ -434,10 +424,10 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
434
424
|
const status = objectData.status;
|
|
435
425
|
const statusInfo = {};
|
|
436
426
|
if (status.powerState) statusInfo["Power State"] = status.powerState;
|
|
437
|
-
if (status.phase) statusInfo
|
|
427
|
+
if (status.phase) statusInfo.Phase = status.phase;
|
|
438
428
|
if (status.primaryIP4) statusInfo["Primary IP"] = status.primaryIP4;
|
|
439
|
-
if (status.host) statusInfo
|
|
440
|
-
if (status.zone) statusInfo
|
|
429
|
+
if (status.host) statusInfo.Host = status.host;
|
|
430
|
+
if (status.zone) statusInfo.Zone = status.zone;
|
|
441
431
|
if (status.uniqueID) statusInfo["Unique ID"] = status.uniqueID;
|
|
442
432
|
if (status.instanceUUID) statusInfo["Instance UUID"] = status.instanceUUID;
|
|
443
433
|
if (status.biosUUID) statusInfo["BIOS UUID"] = status.biosUUID;
|
|
@@ -669,10 +659,14 @@ const VCFAutomationCCIResourceDetails = () => {
|
|
|
669
659
|
}
|
|
670
660
|
}
|
|
671
661
|
) }),
|
|
672
|
-
/* @__PURE__ */
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
662
|
+
/* @__PURE__ */ jsxs(Box, { className: classes.validationStatus, children: [
|
|
663
|
+
yamlValidationError && /* @__PURE__ */ jsxs(Typography, { className: classes.yamlValidationError, children: [
|
|
664
|
+
"\u26A0\uFE0F YAML Validation Error: ",
|
|
665
|
+
yamlValidationError
|
|
666
|
+
] }),
|
|
667
|
+
!yamlValidationError && editingYaml.trim() && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: "\u2705 YAML syntax is valid" }),
|
|
668
|
+
!yamlValidationError && !editingYaml.trim() && /* @__PURE__ */ jsx(Typography, { variant: "caption", color: "textSecondary", children: "Enter YAML content above" })
|
|
669
|
+
] }),
|
|
676
670
|
/* @__PURE__ */ jsxs(Box, { className: classes.editorActions, children: [
|
|
677
671
|
/* @__PURE__ */ jsx(
|
|
678
672
|
Button,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VCFAutomationCCIResourceDetails.esm.js","sources":["../../src/components/VCFAutomationCCIResourceDetails.tsx"],"sourcesContent":["import { useState, useMemo, useCallback } from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { useAsync } from 'react-use';\nimport Editor from '@monaco-editor/react';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport {\n InfoCard,\n StructuredMetadataTable,\n StatusOK,\n StatusError,\n StatusPending,\n Table,\n TableColumn,\n CodeSnippet,\n} from '@backstage/core-components';\nimport { \n Grid, \n Typography, \n Chip, \n Box, \n Card, \n CardContent, \n Tabs, \n Tab,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Button,\n Snackbar,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport * as yaml from 'js-yaml';\nimport { vcfAutomationApiRef } from '../api';\nimport { supervisorResourceEditPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nconst useStyles = makeStyles(theme => ({\n statusChip: {\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n },\n conditionChip: {\n margin: theme.spacing(0.25),\n },\n card: {\n marginBottom: theme.spacing(2),\n },\n statusCard: {\n border: `1px solid ${theme.palette.divider}`,\n },\n dependencyChip: {\n margin: theme.spacing(0.25),\n cursor: 'pointer',\n },\n yamlContainer: {\n '& .MuiAccordionSummary-root': {\n minHeight: 48,\n },\n },\n tabPanel: {\n paddingTop: theme.spacing(2),\n },\n yamlEditorContainer: {\n height: '70vh',\n minHeight: '500px',\n display: 'flex',\n flexDirection: 'column',\n },\n monacoEditor: {\n flex: 1,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n },\n validationStatus: {\n padding: theme.spacing(1),\n borderTop: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n flexShrink: 0,\n },\n yamlValidationError: {\n color: theme.palette.error.main,\n fontSize: '0.875rem',\n },\n editorActions: {\n display: 'flex',\n gap: theme.spacing(1),\n marginTop: theme.spacing(2),\n justifyContent: 'flex-end',\n },\n}));\n\ninterface Condition {\n type: string;\n status: string;\n lastTransitionTime?: string;\n reason?: string;\n message?: string;\n}\n\ninterface WaitCondition {\n type: string;\n status: string;\n}\n\nfunction TabPanel(props: { children?: React.ReactNode; index: number; value: number }) {\n const { children, value, index } = props;\n const classes = useStyles();\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`resource-tabpanel-${index}`}\n aria-labelledby={`resource-tab-${index}`}\n >\n {value === index && (\n <Box className={classes.tabPanel}>\n {children}\n </Box>\n )}\n </div>\n );\n}\n\nexport const VCFAutomationCCIResourceDetails = () => {\n const classes = useStyles();\n const { entity } = useEntity();\n const [tabValue, setTabValue] = useState(0);\n const api = useApi(vcfAutomationApiRef);\n const catalogApi = useApi(catalogApiRef);\n\n // Permission check for supervisor resource editing\n const { allowed: canEditResource } = usePermission({\n permission: supervisorResourceEditPermission,\n });\n\n // State for YAML editor tab\n const [editingYaml, setEditingYaml] = useState('');\n const [originalManifest, setOriginalManifest] = useState<any>(null);\n const [isLoadingManifest, setIsLoadingManifest] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [yamlValidationError, setYamlValidationError] = useState<string>('');\n const [snackbar, setSnackbar] = useState({\n open: false,\n message: '',\n severity: 'success' as 'success' | 'error',\n });\n\n // Extract stable values from entity\n const deploymentId = entity.spec?.system as string;\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n \n // Check if this is a standalone resource\n const isStandalone = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'] === 'STANDALONE';\n\n // Parse annotation data once using useMemo\n const annotationData = useMemo(() => {\n const resourceProperties = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'];\n const resourceManifest = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-manifest'];\n const resourceObject = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-object'];\n const resourceContext = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-context'];\n const resourceState = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-state'];\n const syncStatus = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-sync-status'];\n const createdAt = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-created-at'];\n const origin = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'];\n \n return {\n resourceData: resourceProperties && resourceProperties !== '{}' ? JSON.parse(resourceProperties) : null,\n manifest: resourceManifest && resourceManifest !== '{}' ? JSON.parse(resourceManifest) : null,\n objectData: resourceObject && resourceObject !== '{}' ? JSON.parse(resourceObject) : null,\n resourceContext: resourceContext || '',\n resourceState,\n syncStatus,\n createdAt,\n origin,\n };\n }, [\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-manifest'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-object'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-context'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-state'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-sync-status'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-created-at'],\n entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'],\n ]);\n\n // Check if we need to make API call\n const needsApiCall = !annotationData.resourceData || !annotationData.manifest || !annotationData.objectData;\n\n // Fallback API call if annotation data is missing or empty\n const { value: apiResourceData, loading, error } = useAsync(async () => {\n if (!needsApiCall || !resourceId) {\n return null;\n }\n\n try {\n if (isStandalone) {\n // For standalone resources, fetch directly by resource ID\n const response = await api.getSupervisorResource(resourceId, instanceName);\n if (response) {\n // Transform standalone resource data to match expected structure\n return {\n id: response.id,\n properties: {\n manifest: {\n apiVersion: response.apiVersion,\n kind: response.kind,\n metadata: response.metadata,\n spec: response.spec,\n },\n object: {\n apiVersion: response.apiVersion,\n kind: response.kind,\n metadata: response.metadata,\n spec: response.spec,\n status: response.status,\n },\n context: JSON.stringify({\n namespace: response.metadata.namespace,\n apiVersion: response.apiVersion,\n kind: response.kind,\n standalone: true,\n }),\n },\n };\n }\n } else {\n // For deployment-managed resources, use existing logic\n if (!deploymentId) {\n return null;\n }\n \n const response = await api.getDeploymentResources(deploymentId, instanceName);\n let resources = null;\n if (response) {\n // Handle both direct array and paginated response with content wrapper\n if (Array.isArray(response)) {\n resources = response;\n } else if (response.content && Array.isArray(response.content)) {\n resources = response.content;\n }\n }\n if (resources) {\n return resources.find((r: any) => r.id === resourceId);\n }\n }\n return null;\n } catch (apiError) {\n console.error('Failed to fetch resource data:', apiError);\n return null;\n }\n }, [needsApiCall, isStandalone, deploymentId, resourceId, instanceName]);\n\n // Determine final data to use\n const resourceData = annotationData.resourceData || apiResourceData;\n const manifest = annotationData.manifest || apiResourceData?.properties?.manifest;\n const objectData = annotationData.objectData || apiResourceData?.properties?.object;\n const resourceContext = annotationData.resourceContext || apiResourceData?.properties?.context;\n const resourceState = annotationData.resourceState;\n const syncStatus = annotationData.syncStatus;\n const createdAt = annotationData.createdAt;\n const origin = annotationData.origin;\n\n // Extract resource-specific information for YAML editor\n const resourceKind = manifest?.kind || objectData?.kind;\n const resourceName = manifest?.metadata?.name || objectData?.metadata?.name;\n const namespaceName = manifest?.metadata?.namespace || objectData?.metadata?.namespace;\n const apiVersion = manifest?.apiVersion || objectData?.apiVersion;\n \n // Helper function to extract namespace URN ID from CCI namespace endpoint annotation\n const extractNamespaceUrnId = useCallback((endpoint: string): string | undefined => {\n // Parse: https://polo-vra.terasky.local/proxy/k8s/namespaces/urn:vcloud:namespace:0a354079-dfe4-4bf9-bce0-4fd87fbffc25\n const match = endpoint.match(/\\/namespaces\\/(urn:vcloud:namespace:[^\\/]+)/);\n return match ? match[1] : undefined;\n }, []);\n\n // Recursive function to find CCI Supervisor Namespace parent component (up to 3 levels deep)\n const findCCINamespaceParent = useCallback(async (currentEntity: any, depth = 0): Promise<string | undefined> => {\n if (depth >= 3) return undefined; // Max 3 levels deep\n \n // Check if current entity is a CCI Supervisor Namespace\n if (currentEntity.spec?.type === 'CCI.Supervisor.Namespace') {\n const endpoint = currentEntity.metadata?.annotations?.['terasky.backstage.io/vcf-automation-cci-namespace-endpoint'];\n if (endpoint) {\n return extractNamespaceUrnId(endpoint);\n }\n }\n \n // Look for parent component\n const parentRef = currentEntity.spec?.subcomponentOf;\n if (!parentRef) return undefined;\n \n try {\n // Get parent entity from catalog\n const parentEntity = await catalogApi.getEntityByRef(parentRef);\n if (parentEntity) {\n return await findCCINamespaceParent(parentEntity, depth + 1);\n }\n } catch (error) {\n console.warn('Failed to fetch parent entity:', parentRef, error);\n }\n \n return undefined;\n }, [catalogApi, extractNamespaceUrnId]);\n\n // For CCI resources, extract namespace URN ID from context (standalone) or parent hierarchy (deployment-managed)\n const { value: namespaceUrnId } = useAsync(async () => {\n if (!namespaceName) return undefined;\n \n if (isStandalone) {\n // For standalone resources, try to extract from resource context\n let contextData = null;\n try {\n contextData = typeof resourceContext === 'string' ? JSON.parse(resourceContext || '{}') : resourceContext;\n } catch (error) {\n console.log('Debug - Resource context is not JSON, treating as string:', resourceContext);\n contextData = null;\n }\n \n return contextData?.namespaceUrnId || namespaceName;\n } else {\n // For deployment-managed resources, traverse parent hierarchy to find CCI Supervisor Namespace\n const urnId = await findCCINamespaceParent(entity);\n return urnId || namespaceName; // Fallback to namespace name if not found\n }\n }, [namespaceName, resourceContext, isStandalone, entity, findCCINamespaceParent]);\n\n // Load manifest for editing\n const loadManifestForEditing = useCallback(async () => {\n if (!canEditResource || !namespaceName || !resourceName || !namespaceUrnId || !apiVersion || !resourceKind) {\n return;\n }\n\n setIsLoadingManifest(true);\n\n try {\n const manifestResponse = await api.getSupervisorResourceManifest(\n namespaceUrnId,\n namespaceName,\n resourceName,\n apiVersion,\n resourceKind,\n instanceName\n );\n\n setOriginalManifest(manifestResponse);\n const yamlContent = yaml.dump(manifestResponse, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n sortKeys: false,\n });\n setEditingYaml(yamlContent);\n setYamlValidationError('');\n } catch (error) {\n setSnackbar({\n open: true,\n message: `Failed to fetch resource manifest: ${error instanceof Error ? error.message : 'Unknown error'}`,\n severity: 'error',\n });\n } finally {\n setIsLoadingManifest(false);\n }\n }, [canEditResource, namespaceName, resourceName, namespaceUrnId, apiVersion, resourceKind, instanceName, api]);\n\n // YAML validation function\n const validateYaml = useCallback((yamlString: string) => {\n try {\n yaml.load(yamlString);\n setYamlValidationError('');\n return true;\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Invalid YAML syntax';\n setYamlValidationError(errorMessage);\n return false;\n }\n }, []);\n\n // Handle YAML editor changes with validation\n const handleYamlChange = useCallback((value: string) => {\n setEditingYaml(value);\n if (value.trim()) {\n validateYaml(value);\n } else {\n setYamlValidationError('');\n }\n }, [validateYaml]);\n\n // Handle save resource\n const handleSaveResource = useCallback(async () => {\n if (!originalManifest || !namespaceName || !resourceName || !namespaceUrnId || !apiVersion || !resourceKind) {\n return;\n }\n\n setIsSaving(true);\n setConfirmDialogOpen(false);\n\n try {\n const updatedManifest = yaml.load(editingYaml);\n \n await api.updateSupervisorResourceManifest(\n namespaceUrnId,\n namespaceName,\n resourceName,\n apiVersion,\n resourceKind,\n updatedManifest,\n instanceName\n );\n\n setSnackbar({\n open: true,\n message: 'Resource manifest updated successfully',\n severity: 'success',\n });\n\n setTimeout(() => window.location.reload(), 1000);\n } catch (error) {\n setSnackbar({\n open: true,\n message: `Failed to update resource manifest: ${error instanceof Error ? error.message : 'Unknown error'}`,\n severity: 'error',\n });\n } finally {\n setIsSaving(false);\n }\n }, [originalManifest, namespaceName, resourceName, namespaceUrnId, apiVersion, resourceKind, editingYaml, instanceName, api]);\n\n // Handle cancel editing\n const handleCancelEditing = useCallback(() => {\n setEditingYaml('');\n setOriginalManifest(null);\n setYamlValidationError('');\n }, []);\n\n const handleCloseSnackbar = useCallback(() => {\n setSnackbar(prev => ({ ...prev, open: false }));\n }, []);\n\n const handleTabChange = (_event: React.ChangeEvent<{}>, newValue: number) => {\n setTabValue(newValue);\n \n // Load manifest when YAML editor tab is selected\n if (newValue === 5 && canEditResource && !editingYaml && !isLoadingManifest) {\n loadManifestForEditing();\n }\n };\n\n if (loading) {\n return (\n <InfoCard title=\"CCI Supervisor Resource Details\">\n <Typography>Loading resource details...</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return (\n <InfoCard title=\"CCI Supervisor Resource Details\">\n <Typography color=\"error\">Error loading resource details: {error.message}</Typography>\n </InfoCard>\n );\n }\n\n if (!resourceData && !manifest && !objectData) {\n return (\n <InfoCard title=\"CCI Supervisor Resource Details\">\n <Typography>No resource data available.</Typography>\n </InfoCard>\n );\n }\n\n const renderStatusIcon = (conditionStatus: string) => {\n switch (conditionStatus.toLowerCase()) {\n case 'true':\n return <StatusOK />;\n case 'false':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n const reorderKubernetesResource = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n // Standard Kubernetes resource field order\n const orderedFields = ['apiVersion', 'kind', 'metadata', 'spec', 'status', 'data'];\n const reordered: any = {};\n\n // Add fields in the correct order\n orderedFields.forEach(field => {\n if (data[field] !== undefined) {\n reordered[field] = data[field];\n }\n });\n\n // Add any remaining fields that weren't in our standard list\n Object.keys(data).forEach(field => {\n if (!orderedFields.includes(field)) {\n reordered[field] = data[field];\n }\n });\n\n return reordered;\n };\n\n const formatYaml = (data: any) => {\n try {\n const reorderedData = reorderKubernetesResource(data);\n return yaml.dump(reorderedData, { \n indent: 2, \n lineWidth: -1,\n noRefs: true,\n sortKeys: false \n });\n } catch (error) {\n return JSON.stringify(data, null, 2);\n }\n };\n\n const basicInfo = {\n 'Resource Name': entity.metadata.title || entity.metadata.name,\n 'Resource ID': resourceData.id || 'Unknown',\n 'Context': resourceContext || 'Unknown',\n 'Resource Link': resourceData.resourceLink || 'Not available',\n 'Count': resourceData.count?.toString() || 'N/A',\n 'Count Index': resourceData.countIndex?.toString() || 'N/A',\n 'Existing': resourceData.existing ? 'Yes' : 'No',\n 'State': resourceState || 'Unknown',\n 'Sync Status': syncStatus || 'Unknown',\n 'Origin': origin || 'Unknown',\n 'Created At': createdAt ? new Date(createdAt).toLocaleString() : 'Unknown',\n };\n\n const getManifestInfo = () => {\n if (!manifest) return {};\n \n const info: any = {};\n if (manifest.kind) info['Kind'] = manifest.kind;\n if (manifest.apiVersion) info['API Version'] = manifest.apiVersion;\n if (manifest.metadata?.name) info['Manifest Name'] = manifest.metadata.name;\n if (manifest.metadata?.namespace) info['Namespace'] = manifest.metadata.namespace;\n if (manifest.metadata?.labels) {\n const labelCount = Object.keys(manifest.metadata.labels).length;\n info['Labels'] = `${labelCount} label(s)`;\n }\n if (manifest.metadata?.annotations) {\n const annotationCount = Object.keys(manifest.metadata.annotations).length;\n info['Annotations'] = `${annotationCount} annotation(s)`;\n }\n \n return info;\n };\n\n const getObjectStatus = () => {\n if (!objectData?.status) return null;\n \n const status = objectData.status;\n const statusInfo: any = {};\n \n if (status.powerState) statusInfo['Power State'] = status.powerState;\n if (status.phase) statusInfo['Phase'] = status.phase;\n if (status.primaryIP4) statusInfo['Primary IP'] = status.primaryIP4;\n if (status.host) statusInfo['Host'] = status.host;\n if (status.zone) statusInfo['Zone'] = status.zone;\n if (status.uniqueID) statusInfo['Unique ID'] = status.uniqueID;\n if (status.instanceUUID) statusInfo['Instance UUID'] = status.instanceUUID;\n if (status.biosUUID) statusInfo['BIOS UUID'] = status.biosUUID;\n if (status.hardwareVersion) statusInfo['Hardware Version'] = status.hardwareVersion;\n if (status.changeBlockTracking !== undefined) statusInfo['Change Block Tracking'] = status.changeBlockTracking ? 'Enabled' : 'Disabled';\n \n return Object.keys(statusInfo).length > 0 ? statusInfo : null;\n };\n\n const manifestInfo = getManifestInfo();\n const objectStatus = getObjectStatus();\n\n const waitConditionColumns: TableColumn<WaitCondition>[] = [\n { \n title: 'Status', \n field: 'status',\n render: (rowData) => (\n <Box display=\"flex\" alignItems=\"center\">\n {renderStatusIcon(rowData.status)}\n <span style={{ marginLeft: 8 }}>{rowData.status}</span>\n </Box>\n ),\n },\n { title: 'Type', field: 'type' },\n ];\n\n const resourceConditionColumns: TableColumn<Condition>[] = [\n { \n title: 'Status', \n field: 'status',\n render: (rowData) => (\n <Box display=\"flex\" alignItems=\"center\">\n {renderStatusIcon(rowData.status)}\n <span style={{ marginLeft: 8 }}>{rowData.status}</span>\n </Box>\n ),\n },\n { title: 'Type', field: 'type' },\n { title: 'Last Transition', field: 'lastTransitionTime' },\n { title: 'Reason', field: 'reason' },\n { title: 'Message', field: 'message' },\n ];\n\n const getNetworkInfo = () => {\n if (!objectData?.status?.network) return null;\n \n const network = objectData.status.network;\n const networkInfo: any = {};\n \n if (network.primaryIP4) networkInfo['Primary IPv4'] = network.primaryIP4;\n if (network.interfaces && network.interfaces.length > 0) {\n networkInfo['Network Interfaces'] = `${network.interfaces.length} interface(s)`;\n \n network.interfaces.forEach((iface: any, index: number) => {\n if (iface.ip?.macAddr) networkInfo[`Interface ${index + 1} MAC`] = iface.ip.macAddr;\n if (iface.ip?.addresses && iface.ip.addresses.length > 0) {\n const primaryAddr = iface.ip.addresses.find((addr: any) => addr.state === 'preferred');\n if (primaryAddr) networkInfo[`Interface ${index + 1} IP`] = primaryAddr.address;\n }\n });\n }\n \n return Object.keys(networkInfo).length > 0 ? networkInfo : null;\n };\n\n const networkInfo = getNetworkInfo();\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"Resource Overview\">\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n State\n </Typography>\n <Typography variant=\"h4\">\n {resourceState || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Sync Status\n </Typography>\n <Typography variant=\"h4\">\n {syncStatus || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Kind\n </Typography>\n <Typography variant=\"h4\">\n {manifest?.kind || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Power State\n </Typography>\n <Typography variant=\"h4\">\n {objectData?.status?.powerState || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </InfoCard>\n </Grid>\n\n <Grid item xs={12}>\n <InfoCard>\n <Tabs value={tabValue} onChange={handleTabChange} aria-label=\"resource details tabs\">\n <Tab label=\"Basic Information\" />\n <Tab label=\"Manifest Details\" />\n <Tab label=\"Object Status\" />\n <Tab label=\"Conditions\" />\n <Tab label=\"YAML Views\" />\n {canEditResource && resourceName && namespaceName && namespaceUrnId && apiVersion && (\n <Tab label=\"Edit Manifest\" />\n )}\n </Tabs>\n\n <TabPanel value={tabValue} index={0}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <StructuredMetadataTable metadata={basicInfo} />\n </Grid>\n \n {entity.spec?.dependsOn && Array.isArray(entity.spec.dependsOn) && entity.spec.dependsOn.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Dependencies\n </Typography>\n <Box>\n {entity.spec.dependsOn\n .filter((dep): dep is string => typeof dep === 'string')\n .map((dep: string, index: number) => (\n <Chip\n key={index}\n label={dep}\n size=\"small\"\n className={classes.dependencyChip}\n color=\"primary\"\n variant=\"outlined\"\n />\n ))}\n </Box>\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={1}>\n <Grid container spacing={3}>\n {Object.keys(manifestInfo).length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Manifest Information\n </Typography>\n <StructuredMetadataTable metadata={manifestInfo} />\n </Grid>\n )}\n \n {manifest?.metadata?.labels && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Labels\n </Typography>\n <StructuredMetadataTable metadata={manifest.metadata.labels} />\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={2}>\n <Grid container spacing={3}>\n {objectStatus && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Object Status\n </Typography>\n <StructuredMetadataTable metadata={objectStatus} />\n </Grid>\n )}\n \n {networkInfo && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Network Information\n </Typography>\n <StructuredMetadataTable metadata={networkInfo} />\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={3}>\n <Grid container spacing={3}>\n {resourceData.wait?.conditions && resourceData.wait.conditions.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Wait Conditions\n </Typography>\n <Table\n columns={waitConditionColumns}\n data={resourceData.wait.conditions}\n options={{\n search: false,\n paging: false,\n padding: 'dense',\n }}\n />\n </Grid>\n )}\n\n {objectData?.status?.conditions && objectData.status.conditions.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Resource Conditions\n </Typography>\n <Table\n columns={resourceConditionColumns}\n data={objectData.status.conditions}\n options={{\n search: true,\n paging: objectData.status.conditions.length > 10,\n pageSize: 10,\n padding: 'dense',\n }}\n />\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={4}>\n <Grid container spacing={3}>\n {manifest && (\n <Grid item xs={12}>\n <Accordion className={classes.yamlContainer} defaultExpanded>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"manifest-content\"\n id=\"manifest-header\"\n >\n <Typography variant=\"h6\">Resource Manifest</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box width=\"100%\">\n <CodeSnippet\n text={formatYaml(manifest)}\n language=\"yaml\"\n showLineNumbers\n customStyle={{ \n fontSize: '12px',\n maxHeight: '600px',\n overflow: 'auto'\n }}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {objectData && (\n <Grid item xs={12}>\n <Accordion className={classes.yamlContainer}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"object-content\"\n id=\"object-header\"\n >\n <Typography variant=\"h6\">Live Kubernetes Object</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box width=\"100%\">\n <CodeSnippet\n text={formatYaml(objectData)}\n language=\"yaml\"\n showLineNumbers\n customStyle={{ \n fontSize: '12px',\n maxHeight: '600px',\n overflow: 'auto'\n }}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n {/* YAML Editor Tab */}\n {canEditResource && resourceName && namespaceName && namespaceUrnId && apiVersion && (\n <TabPanel value={tabValue} index={5}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Edit Resource Manifest\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n {resourceName} ({resourceKind})\n </Typography>\n \n {isLoadingManifest ? (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\" minHeight=\"400px\">\n <Typography>Loading manifest...</Typography>\n </Box>\n ) : (\n <Box className={classes.yamlEditorContainer}>\n <Box className={classes.monacoEditor}>\n <Editor\n height=\"100%\"\n defaultLanguage=\"yaml\"\n value={editingYaml}\n onChange={(value) => handleYamlChange(value || '')}\n theme=\"vs-dark\"\n options={{\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n fontSize: 14,\n lineNumbers: 'on',\n wordWrap: 'off',\n automaticLayout: true,\n tabSize: 2,\n insertSpaces: true,\n folding: true,\n renderWhitespace: 'selection',\n }}\n />\n </Box>\n \n {/* Fixed Validation Status Bar */}\n <Box className={classes.validationStatus}>\n {yamlValidationError ? (\n <Typography className={classes.yamlValidationError}>\n ⚠️ YAML Validation Error: {yamlValidationError}\n </Typography>\n ) : editingYaml.trim() ? (\n <Typography variant=\"caption\" color=\"textSecondary\">\n ✅ YAML syntax is valid\n </Typography>\n ) : (\n <Typography variant=\"caption\" color=\"textSecondary\">\n Enter YAML content above\n </Typography>\n )}\n </Box>\n\n {/* Action Buttons */}\n <Box className={classes.editorActions}>\n <Button\n variant=\"outlined\"\n onClick={handleCancelEditing}\n disabled={isSaving}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setConfirmDialogOpen(true)}\n disabled={!editingYaml.trim() || !!yamlValidationError || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save Changes'}\n </Button>\n </Box>\n </Box>\n )}\n </Grid>\n </Grid>\n </TabPanel>\n )}\n\n {/* Confirmation Dialog */}\n <Dialog\n open={confirmDialogOpen}\n onClose={() => setConfirmDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Confirm Changes</DialogTitle>\n <DialogContent>\n <Typography>\n Are you sure you want to apply these changes to the resource? \n This action will update the Kubernetes resource based on your modifications.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setConfirmDialogOpen(false)} color=\"primary\">\n Cancel\n </Button>\n <Button\n onClick={handleSaveResource}\n color=\"primary\"\n variant=\"contained\"\n disabled={isSaving}\n >\n {isSaving ? 'Applying...' : 'Apply Changes'}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* Snackbar for notifications */}\n <Snackbar\n open={snackbar.open}\n autoHideDuration={6000}\n onClose={handleCloseSnackbar}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n >\n <Alert onClose={handleCloseSnackbar} severity={snackbar.severity}>\n {snackbar.message}\n </Alert>\n </Snackbar>\n </InfoCard>\n </Grid>\n </Grid>\n );\n};"],"names":["resourceContext","resourceState","syncStatus","createdAt","origin","error","networkInfo"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"VCFAutomationCCIResourceDetails.esm.js","sources":["../../src/components/VCFAutomationCCIResourceDetails.tsx"],"sourcesContent":["import { useState, useMemo, useCallback } from 'react';\nimport { useEntity } from '@backstage/plugin-catalog-react';\nimport { useApi } from '@backstage/core-plugin-api';\nimport { usePermission } from '@backstage/plugin-permission-react';\nimport { useAsync } from 'react-use';\nimport Editor from '@monaco-editor/react';\nimport { catalogApiRef } from '@backstage/plugin-catalog-react';\nimport {\n InfoCard,\n StructuredMetadataTable,\n StatusOK,\n StatusError,\n StatusPending,\n Table,\n TableColumn,\n CodeSnippet,\n} from '@backstage/core-components';\nimport { \n Grid, \n Typography, \n Chip, \n Box, \n Card, \n CardContent, \n Tabs, \n Tab,\n Accordion,\n AccordionSummary,\n AccordionDetails,\n Button,\n Snackbar,\n Dialog,\n DialogTitle,\n DialogContent,\n DialogActions\n} from '@material-ui/core';\nimport { Alert } from '@material-ui/lab';\nimport { makeStyles } from '@material-ui/core/styles';\nimport ExpandMoreIcon from '@material-ui/icons/ExpandMore';\nimport * as yaml from 'js-yaml';\nimport { vcfAutomationApiRef } from '../api';\nimport { supervisorResourceEditPermission } from '@terasky/backstage-plugin-vcf-automation-common';\n\nconst useStyles = makeStyles(theme => ({\n statusChip: {\n marginRight: theme.spacing(1),\n marginBottom: theme.spacing(0.5),\n },\n sectionTitle: {\n marginBottom: theme.spacing(2),\n },\n conditionChip: {\n margin: theme.spacing(0.25),\n },\n card: {\n marginBottom: theme.spacing(2),\n },\n statusCard: {\n border: `1px solid ${theme.palette.divider}`,\n },\n dependencyChip: {\n margin: theme.spacing(0.25),\n cursor: 'pointer',\n },\n yamlContainer: {\n '& .MuiAccordionSummary-root': {\n minHeight: 48,\n },\n },\n tabPanel: {\n paddingTop: theme.spacing(2),\n },\n yamlEditorContainer: {\n height: '70vh',\n minHeight: '500px',\n display: 'flex',\n flexDirection: 'column',\n },\n monacoEditor: {\n flex: 1,\n border: `1px solid ${theme.palette.divider}`,\n borderRadius: theme.shape.borderRadius,\n },\n validationStatus: {\n padding: theme.spacing(1),\n borderTop: `1px solid ${theme.palette.divider}`,\n backgroundColor: theme.palette.background.paper,\n flexShrink: 0,\n },\n yamlValidationError: {\n color: theme.palette.error.main,\n fontSize: '0.875rem',\n },\n editorActions: {\n display: 'flex',\n gap: theme.spacing(1),\n marginTop: theme.spacing(2),\n justifyContent: 'flex-end',\n },\n}));\n\ninterface Condition {\n type: string;\n status: string;\n lastTransitionTime?: string;\n reason?: string;\n message?: string;\n}\n\ninterface WaitCondition {\n type: string;\n status: string;\n}\n\nfunction TabPanel(props: { children?: React.ReactNode; index: number; value: number }) {\n const { children, value, index } = props;\n const classes = useStyles();\n\n return (\n <div\n role=\"tabpanel\"\n hidden={value !== index}\n id={`resource-tabpanel-${index}`}\n aria-labelledby={`resource-tab-${index}`}\n >\n {value === index && (\n <Box className={classes.tabPanel}>\n {children}\n </Box>\n )}\n </div>\n );\n}\n\nexport const VCFAutomationCCIResourceDetails = () => {\n const classes = useStyles();\n const { entity } = useEntity();\n const [tabValue, setTabValue] = useState(0);\n const api = useApi(vcfAutomationApiRef);\n const catalogApi = useApi(catalogApiRef);\n\n // Permission check for supervisor resource editing\n const { allowed: canEditResource } = usePermission({\n permission: supervisorResourceEditPermission,\n });\n\n // State for YAML editor tab\n const [editingYaml, setEditingYaml] = useState('');\n const [originalManifest, setOriginalManifest] = useState<any>(null);\n const [isLoadingManifest, setIsLoadingManifest] = useState(false);\n const [isSaving, setIsSaving] = useState(false);\n const [confirmDialogOpen, setConfirmDialogOpen] = useState(false);\n const [yamlValidationError, setYamlValidationError] = useState<string>('');\n const [snackbar, setSnackbar] = useState({\n open: false,\n message: '',\n severity: 'success' as 'success' | 'error',\n });\n\n // Extract stable values from entity\n const deploymentId = entity.spec?.system as string;\n const resourceId = entity.metadata.name;\n const instanceName = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-instance'];\n \n // Check if this is a standalone resource\n const isStandalone = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'] === 'STANDALONE';\n\n // Parse annotation data once using useMemo\n const annotationData = useMemo(() => {\n const resourceProperties = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-properties'];\n const resourceManifest = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-manifest'];\n const resourceObject = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-object'];\n const resourceContext = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-cci-resource-context'];\n const resourceState = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-state'];\n const syncStatus = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-sync-status'];\n const createdAt = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-created-at'];\n const origin = entity.metadata.annotations?.['terasky.backstage.io/vcf-automation-resource-origin'];\n \n return {\n resourceData: resourceProperties && resourceProperties !== '{}' ? JSON.parse(resourceProperties) : null,\n manifest: resourceManifest && resourceManifest !== '{}' ? JSON.parse(resourceManifest) : null,\n objectData: resourceObject && resourceObject !== '{}' ? JSON.parse(resourceObject) : null,\n resourceContext: resourceContext || '',\n resourceState,\n syncStatus,\n createdAt,\n origin,\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [entity.metadata.annotations]);\n\n // Check if we need to make API call\n const needsApiCall = !annotationData.resourceData || !annotationData.manifest || !annotationData.objectData;\n\n // Fallback API call if annotation data is missing or empty\n const { value: apiResourceData, loading, error } = useAsync(async () => {\n if (!needsApiCall || !resourceId) {\n return null;\n }\n\n try {\n if (isStandalone) {\n // For standalone resources, fetch directly by resource ID\n const response = await api.getSupervisorResource(resourceId, instanceName);\n if (response) {\n // Transform standalone resource data to match expected structure\n return {\n id: response.id,\n properties: {\n manifest: {\n apiVersion: response.apiVersion,\n kind: response.kind,\n metadata: response.metadata,\n spec: response.spec,\n },\n object: {\n apiVersion: response.apiVersion,\n kind: response.kind,\n metadata: response.metadata,\n spec: response.spec,\n status: response.status,\n },\n context: JSON.stringify({\n namespace: response.metadata.namespace,\n apiVersion: response.apiVersion,\n kind: response.kind,\n standalone: true,\n }),\n },\n };\n }\n } else {\n // For deployment-managed resources, use existing logic\n if (!deploymentId) {\n return null;\n }\n \n const response = await api.getDeploymentResources(deploymentId, instanceName);\n let resources = null;\n if (response) {\n // Handle both direct array and paginated response with content wrapper\n if (Array.isArray(response)) {\n resources = response;\n } else if (response.content && Array.isArray(response.content)) {\n resources = response.content;\n }\n }\n if (resources) {\n return resources.find((r: any) => r.id === resourceId);\n }\n }\n return null;\n } catch (apiError) {\n // eslint-disable-next-line no-console\n console.error('Failed to fetch resource data:', apiError);\n return null;\n }\n }, [needsApiCall, isStandalone, deploymentId, resourceId, instanceName]);\n\n // Determine final data to use\n const resourceData = annotationData.resourceData || apiResourceData;\n const manifest = annotationData.manifest || apiResourceData?.properties?.manifest;\n const objectData = annotationData.objectData || apiResourceData?.properties?.object;\n const resourceContext = annotationData.resourceContext || apiResourceData?.properties?.context;\n const resourceState = annotationData.resourceState;\n const syncStatus = annotationData.syncStatus;\n const createdAt = annotationData.createdAt;\n const origin = annotationData.origin;\n\n // Extract resource-specific information for YAML editor\n const resourceKind = manifest?.kind || objectData?.kind;\n const resourceName = manifest?.metadata?.name || objectData?.metadata?.name;\n const namespaceName = manifest?.metadata?.namespace || objectData?.metadata?.namespace;\n const apiVersion = manifest?.apiVersion || objectData?.apiVersion;\n \n // Helper function to extract namespace URN ID from CCI namespace endpoint annotation\n const extractNamespaceUrnId = useCallback((endpoint: string): string | undefined => {\n // Parse: https://polo-vra.terasky.local/proxy/k8s/namespaces/urn:vcloud:namespace:0a354079-dfe4-4bf9-bce0-4fd87fbffc25\n const match = endpoint.match(/\\/namespaces\\/(urn:vcloud:namespace:[^\\/]+)/);\n return match ? match[1] : undefined;\n }, []);\n\n // Recursive function to find CCI Supervisor Namespace parent component (up to 3 levels deep)\n const findCCINamespaceParent = useCallback(async (currentEntity: any, depth = 0): Promise<string | undefined> => {\n if (depth >= 3) return undefined; // Max 3 levels deep\n \n // Check if current entity is a CCI Supervisor Namespace\n if (currentEntity.spec?.type === 'CCI.Supervisor.Namespace') {\n const endpoint = currentEntity.metadata?.annotations?.['terasky.backstage.io/vcf-automation-cci-namespace-endpoint'];\n if (endpoint) {\n return extractNamespaceUrnId(endpoint);\n }\n }\n \n // Look for parent component\n const parentRef = currentEntity.spec?.subcomponentOf;\n if (!parentRef) return undefined;\n \n try {\n // Get parent entity from catalog\n const parentEntity = await catalogApi.getEntityByRef(parentRef);\n if (parentEntity) {\n return await findCCINamespaceParent(parentEntity, depth + 1);\n }\n } catch (caughtError) {\n // eslint-disable-next-line no-console\n console.warn('Failed to fetch parent entity:', parentRef, caughtError);\n }\n \n return undefined;\n }, [catalogApi, extractNamespaceUrnId]);\n\n // For CCI resources, extract namespace URN ID from context (standalone) or parent hierarchy (deployment-managed)\n const { value: namespaceUrnId } = useAsync(async () => {\n if (!namespaceName) return undefined;\n \n if (isStandalone) {\n // For standalone resources, try to extract from resource context\n let contextData = null;\n try {\n contextData = typeof resourceContext === 'string' ? JSON.parse(resourceContext || '{}') : resourceContext;\n } catch (caughtError) {\n // eslint-disable-next-line no-console\n console.log('Debug - Resource context is not JSON, treating as string:', resourceContext);\n contextData = null;\n }\n \n return contextData?.namespaceUrnId || namespaceName;\n } \n // For deployment-managed resources, traverse parent hierarchy to find CCI Supervisor Namespace\n const urnId = await findCCINamespaceParent(entity);\n return urnId || namespaceName; // Fallback to namespace name if not found\n \n }, [namespaceName, resourceContext, isStandalone, entity, findCCINamespaceParent]);\n\n // Load manifest for editing\n const loadManifestForEditing = useCallback(async () => {\n if (!canEditResource || !namespaceName || !resourceName || !namespaceUrnId || !apiVersion || !resourceKind) {\n return;\n }\n\n setIsLoadingManifest(true);\n\n try {\n const manifestResponse = await api.getSupervisorResourceManifest(\n namespaceUrnId,\n namespaceName,\n resourceName,\n apiVersion,\n resourceKind,\n instanceName\n );\n\n setOriginalManifest(manifestResponse);\n const yamlContent = yaml.dump(manifestResponse, {\n indent: 2,\n lineWidth: -1,\n noRefs: true,\n sortKeys: false,\n });\n setEditingYaml(yamlContent);\n setYamlValidationError('');\n } catch (caughtError) {\n setSnackbar({\n open: true,\n message: `Failed to fetch resource manifest: ${caughtError instanceof Error ? caughtError.message : 'Unknown error'}`,\n severity: 'error',\n });\n } finally {\n setIsLoadingManifest(false);\n }\n }, [canEditResource, namespaceName, resourceName, namespaceUrnId, apiVersion, resourceKind, instanceName, api]);\n\n // YAML validation function\n const validateYaml = useCallback((yamlString: string) => {\n try {\n yaml.load(yamlString);\n setYamlValidationError('');\n return true;\n } catch (caughtError) {\n const errorMessage = caughtError instanceof Error ? caughtError.message : 'Invalid YAML syntax';\n setYamlValidationError(errorMessage);\n return false;\n }\n }, []);\n\n // Handle YAML editor changes with validation\n const handleYamlChange = useCallback((value: string) => {\n setEditingYaml(value);\n if (value.trim()) {\n validateYaml(value);\n } else {\n setYamlValidationError('');\n }\n }, [validateYaml]);\n\n // Handle save resource\n const handleSaveResource = useCallback(async () => {\n if (!originalManifest || !namespaceName || !resourceName || !namespaceUrnId || !apiVersion || !resourceKind) {\n return;\n }\n\n setIsSaving(true);\n setConfirmDialogOpen(false);\n\n try {\n const updatedManifest = yaml.load(editingYaml);\n \n await api.updateSupervisorResourceManifest(\n namespaceUrnId,\n namespaceName,\n resourceName,\n apiVersion,\n resourceKind,\n updatedManifest,\n instanceName\n );\n\n setSnackbar({\n open: true,\n message: 'Resource manifest updated successfully',\n severity: 'success',\n });\n\n setTimeout(() => window.location.reload(), 1000);\n } catch (caughtError) {\n setSnackbar({\n open: true,\n message: `Failed to update resource manifest: ${caughtError instanceof Error ? caughtError.message : 'Unknown error'}`,\n severity: 'error',\n });\n } finally {\n setIsSaving(false);\n }\n }, [originalManifest, namespaceName, resourceName, namespaceUrnId, apiVersion, resourceKind, editingYaml, instanceName, api]);\n\n // Handle cancel editing\n const handleCancelEditing = useCallback(() => {\n setEditingYaml('');\n setOriginalManifest(null);\n setYamlValidationError('');\n }, []);\n\n const handleCloseSnackbar = useCallback(() => {\n setSnackbar(prev => ({ ...prev, open: false }));\n }, []);\n\n const handleTabChange = (_event: React.ChangeEvent<{}>, newValue: number) => {\n setTabValue(newValue);\n \n // Load manifest when YAML editor tab is selected\n if (newValue === 5 && canEditResource && !editingYaml && !isLoadingManifest) {\n loadManifestForEditing();\n }\n };\n\n if (loading) {\n return (\n <InfoCard title=\"CCI Supervisor Resource Details\">\n <Typography>Loading resource details...</Typography>\n </InfoCard>\n );\n }\n\n if (error) {\n return (\n <InfoCard title=\"CCI Supervisor Resource Details\">\n <Typography color=\"error\">Error loading resource details: {error.message}</Typography>\n </InfoCard>\n );\n }\n\n if (!resourceData && !manifest && !objectData) {\n return (\n <InfoCard title=\"CCI Supervisor Resource Details\">\n <Typography>No resource data available.</Typography>\n </InfoCard>\n );\n }\n\n const renderStatusIcon = (conditionStatus: string) => {\n switch (conditionStatus.toLowerCase()) {\n case 'true':\n return <StatusOK />;\n case 'false':\n return <StatusError />;\n default:\n return <StatusPending />;\n }\n };\n\n const reorderKubernetesResource = (data: any) => {\n if (!data || typeof data !== 'object') {\n return data;\n }\n\n // Standard Kubernetes resource field order\n const orderedFields = ['apiVersion', 'kind', 'metadata', 'spec', 'status', 'data'];\n const reordered: any = {};\n\n // Add fields in the correct order\n orderedFields.forEach(field => {\n if (data[field] !== undefined) {\n reordered[field] = data[field];\n }\n });\n\n // Add any remaining fields that weren't in our standard list\n Object.keys(data).forEach(field => {\n if (!orderedFields.includes(field)) {\n reordered[field] = data[field];\n }\n });\n\n return reordered;\n };\n\n const formatYaml = (data: any) => {\n try {\n const reorderedData = reorderKubernetesResource(data);\n return yaml.dump(reorderedData, { \n indent: 2, \n lineWidth: -1,\n noRefs: true,\n sortKeys: false \n });\n } catch (caughtError) {\n return JSON.stringify(data, null, 2);\n }\n };\n\n const basicInfo = {\n 'Resource Name': entity.metadata.title || entity.metadata.name,\n 'Resource ID': resourceData.id || 'Unknown',\n 'Context': resourceContext || 'Unknown',\n 'Resource Link': resourceData.resourceLink || 'Not available',\n 'Count': resourceData.count?.toString() || 'N/A',\n 'Count Index': resourceData.countIndex?.toString() || 'N/A',\n 'Existing': resourceData.existing ? 'Yes' : 'No',\n 'State': resourceState || 'Unknown',\n 'Sync Status': syncStatus || 'Unknown',\n 'Origin': origin || 'Unknown',\n 'Created At': createdAt ? new Date(createdAt).toLocaleString() : 'Unknown',\n };\n\n const getManifestInfo = () => {\n if (!manifest) return {};\n \n const info: any = {};\n if (manifest.kind) info.Kind = manifest.kind;\n if (manifest.apiVersion) info['API Version'] = manifest.apiVersion;\n if (manifest.metadata?.name) info['Manifest Name'] = manifest.metadata.name;\n if (manifest.metadata?.namespace) info.Namespace = manifest.metadata.namespace;\n if (manifest.metadata?.labels) {\n const labelCount = Object.keys(manifest.metadata.labels).length;\n info.Labels = `${labelCount} label(s)`;\n }\n if (manifest.metadata?.annotations) {\n const annotationCount = Object.keys(manifest.metadata.annotations).length;\n info.Annotations = `${annotationCount} annotation(s)`;\n }\n \n return info;\n };\n\n const getObjectStatus = () => {\n if (!objectData?.status) return null;\n \n const status = objectData.status;\n const statusInfo: any = {};\n \n if (status.powerState) statusInfo['Power State'] = status.powerState;\n if (status.phase) statusInfo.Phase = status.phase;\n if (status.primaryIP4) statusInfo['Primary IP'] = status.primaryIP4;\n if (status.host) statusInfo.Host = status.host;\n if (status.zone) statusInfo.Zone = status.zone;\n if (status.uniqueID) statusInfo['Unique ID'] = status.uniqueID;\n if (status.instanceUUID) statusInfo['Instance UUID'] = status.instanceUUID;\n if (status.biosUUID) statusInfo['BIOS UUID'] = status.biosUUID;\n if (status.hardwareVersion) statusInfo['Hardware Version'] = status.hardwareVersion;\n if (status.changeBlockTracking !== undefined) statusInfo['Change Block Tracking'] = status.changeBlockTracking ? 'Enabled' : 'Disabled';\n \n return Object.keys(statusInfo).length > 0 ? statusInfo : null;\n };\n\n const manifestInfo = getManifestInfo();\n const objectStatus = getObjectStatus();\n\n const waitConditionColumns: TableColumn<WaitCondition>[] = [\n { \n title: 'Status', \n field: 'status',\n render: (rowData) => (\n <Box display=\"flex\" alignItems=\"center\">\n {renderStatusIcon(rowData.status)}\n <span style={{ marginLeft: 8 }}>{rowData.status}</span>\n </Box>\n ),\n },\n { title: 'Type', field: 'type' },\n ];\n\n const resourceConditionColumns: TableColumn<Condition>[] = [\n { \n title: 'Status', \n field: 'status',\n render: (rowData) => (\n <Box display=\"flex\" alignItems=\"center\">\n {renderStatusIcon(rowData.status)}\n <span style={{ marginLeft: 8 }}>{rowData.status}</span>\n </Box>\n ),\n },\n { title: 'Type', field: 'type' },\n { title: 'Last Transition', field: 'lastTransitionTime' },\n { title: 'Reason', field: 'reason' },\n { title: 'Message', field: 'message' },\n ];\n\n const getNetworkInfo = () => {\n if (!objectData?.status?.network) return null;\n \n const network = objectData.status.network;\n const networkInfo: any = {};\n \n if (network.primaryIP4) networkInfo['Primary IPv4'] = network.primaryIP4;\n if (network.interfaces && network.interfaces.length > 0) {\n networkInfo['Network Interfaces'] = `${network.interfaces.length} interface(s)`;\n \n network.interfaces.forEach((iface: any, index: number) => {\n if (iface.ip?.macAddr) networkInfo[`Interface ${index + 1} MAC`] = iface.ip.macAddr;\n if (iface.ip?.addresses && iface.ip.addresses.length > 0) {\n const primaryAddr = iface.ip.addresses.find((addr: any) => addr.state === 'preferred');\n if (primaryAddr) networkInfo[`Interface ${index + 1} IP`] = primaryAddr.address;\n }\n });\n }\n \n return Object.keys(networkInfo).length > 0 ? networkInfo : null;\n };\n\n const networkInfo = getNetworkInfo();\n\n return (\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <InfoCard title=\"Resource Overview\">\n <Grid container spacing={2}>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n State\n </Typography>\n <Typography variant=\"h4\">\n {resourceState || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Sync Status\n </Typography>\n <Typography variant=\"h4\">\n {syncStatus || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Kind\n </Typography>\n <Typography variant=\"h4\">\n {manifest?.kind || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n <Grid item xs={12} sm={6} md={3}>\n <Card className={classes.statusCard}>\n <CardContent>\n <Typography variant=\"h6\" color=\"textSecondary\">\n Power State\n </Typography>\n <Typography variant=\"h4\">\n {objectData?.status?.powerState || 'Unknown'}\n </Typography>\n </CardContent>\n </Card>\n </Grid>\n </Grid>\n </InfoCard>\n </Grid>\n\n <Grid item xs={12}>\n <InfoCard>\n <Tabs value={tabValue} onChange={handleTabChange} aria-label=\"resource details tabs\">\n <Tab label=\"Basic Information\" />\n <Tab label=\"Manifest Details\" />\n <Tab label=\"Object Status\" />\n <Tab label=\"Conditions\" />\n <Tab label=\"YAML Views\" />\n {canEditResource && resourceName && namespaceName && namespaceUrnId && apiVersion && (\n <Tab label=\"Edit Manifest\" />\n )}\n </Tabs>\n\n <TabPanel value={tabValue} index={0}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <StructuredMetadataTable metadata={basicInfo} />\n </Grid>\n \n {entity.spec?.dependsOn && Array.isArray(entity.spec.dependsOn) && entity.spec.dependsOn.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Dependencies\n </Typography>\n <Box>\n {entity.spec.dependsOn\n .filter((dep): dep is string => typeof dep === 'string')\n .map((dep: string, index: number) => (\n <Chip\n key={index}\n label={dep}\n size=\"small\"\n className={classes.dependencyChip}\n color=\"primary\"\n variant=\"outlined\"\n />\n ))}\n </Box>\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={1}>\n <Grid container spacing={3}>\n {Object.keys(manifestInfo).length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Manifest Information\n </Typography>\n <StructuredMetadataTable metadata={manifestInfo} />\n </Grid>\n )}\n \n {manifest?.metadata?.labels && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Labels\n </Typography>\n <StructuredMetadataTable metadata={manifest.metadata.labels} />\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={2}>\n <Grid container spacing={3}>\n {objectStatus && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Object Status\n </Typography>\n <StructuredMetadataTable metadata={objectStatus} />\n </Grid>\n )}\n \n {networkInfo && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Network Information\n </Typography>\n <StructuredMetadataTable metadata={networkInfo} />\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={3}>\n <Grid container spacing={3}>\n {resourceData.wait?.conditions && resourceData.wait.conditions.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Wait Conditions\n </Typography>\n <Table\n columns={waitConditionColumns}\n data={resourceData.wait.conditions}\n options={{\n search: false,\n paging: false,\n padding: 'dense',\n }}\n />\n </Grid>\n )}\n\n {objectData?.status?.conditions && objectData.status.conditions.length > 0 && (\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Resource Conditions\n </Typography>\n <Table\n columns={resourceConditionColumns}\n data={objectData.status.conditions}\n options={{\n search: true,\n paging: objectData.status.conditions.length > 10,\n pageSize: 10,\n padding: 'dense',\n }}\n />\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n <TabPanel value={tabValue} index={4}>\n <Grid container spacing={3}>\n {manifest && (\n <Grid item xs={12}>\n <Accordion className={classes.yamlContainer} defaultExpanded>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"manifest-content\"\n id=\"manifest-header\"\n >\n <Typography variant=\"h6\">Resource Manifest</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box width=\"100%\">\n <CodeSnippet\n text={formatYaml(manifest)}\n language=\"yaml\"\n showLineNumbers\n customStyle={{ \n fontSize: '12px',\n maxHeight: '600px',\n overflow: 'auto'\n }}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n\n {objectData && (\n <Grid item xs={12}>\n <Accordion className={classes.yamlContainer}>\n <AccordionSummary\n expandIcon={<ExpandMoreIcon />}\n aria-controls=\"object-content\"\n id=\"object-header\"\n >\n <Typography variant=\"h6\">Live Kubernetes Object</Typography>\n </AccordionSummary>\n <AccordionDetails>\n <Box width=\"100%\">\n <CodeSnippet\n text={formatYaml(objectData)}\n language=\"yaml\"\n showLineNumbers\n customStyle={{ \n fontSize: '12px',\n maxHeight: '600px',\n overflow: 'auto'\n }}\n />\n </Box>\n </AccordionDetails>\n </Accordion>\n </Grid>\n )}\n </Grid>\n </TabPanel>\n\n {/* YAML Editor Tab */}\n {canEditResource && resourceName && namespaceName && namespaceUrnId && apiVersion && (\n <TabPanel value={tabValue} index={5}>\n <Grid container spacing={3}>\n <Grid item xs={12}>\n <Typography variant=\"h6\" className={classes.sectionTitle}>\n Edit Resource Manifest\n </Typography>\n <Typography variant=\"body2\" color=\"textSecondary\" gutterBottom>\n {resourceName} ({resourceKind})\n </Typography>\n \n {isLoadingManifest ? (\n <Box display=\"flex\" justifyContent=\"center\" alignItems=\"center\" minHeight=\"400px\">\n <Typography>Loading manifest...</Typography>\n </Box>\n ) : (\n <Box className={classes.yamlEditorContainer}>\n <Box className={classes.monacoEditor}>\n <Editor\n height=\"100%\"\n defaultLanguage=\"yaml\"\n value={editingYaml}\n onChange={(value) => handleYamlChange(value || '')}\n theme=\"vs-dark\"\n options={{\n minimap: { enabled: false },\n scrollBeyondLastLine: false,\n fontSize: 14,\n lineNumbers: 'on',\n wordWrap: 'off',\n automaticLayout: true,\n tabSize: 2,\n insertSpaces: true,\n folding: true,\n renderWhitespace: 'selection',\n }}\n />\n </Box>\n \n {/* Fixed Validation Status Bar */}\n <Box className={classes.validationStatus}>\n {yamlValidationError && (\n <Typography className={classes.yamlValidationError}>\n ⚠️ YAML Validation Error: {yamlValidationError}\n </Typography>\n )}\n {!yamlValidationError && editingYaml.trim() && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n ✅ YAML syntax is valid\n </Typography>\n )}\n {!yamlValidationError && !editingYaml.trim() && (\n <Typography variant=\"caption\" color=\"textSecondary\">\n Enter YAML content above\n </Typography>\n )}\n </Box>\n\n {/* Action Buttons */}\n <Box className={classes.editorActions}>\n <Button\n variant=\"outlined\"\n onClick={handleCancelEditing}\n disabled={isSaving}\n >\n Cancel\n </Button>\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => setConfirmDialogOpen(true)}\n disabled={!editingYaml.trim() || !!yamlValidationError || isSaving}\n >\n {isSaving ? 'Saving...' : 'Save Changes'}\n </Button>\n </Box>\n </Box>\n )}\n </Grid>\n </Grid>\n </TabPanel>\n )}\n\n {/* Confirmation Dialog */}\n <Dialog\n open={confirmDialogOpen}\n onClose={() => setConfirmDialogOpen(false)}\n maxWidth=\"sm\"\n fullWidth\n >\n <DialogTitle>Confirm Changes</DialogTitle>\n <DialogContent>\n <Typography>\n Are you sure you want to apply these changes to the resource? \n This action will update the Kubernetes resource based on your modifications.\n </Typography>\n </DialogContent>\n <DialogActions>\n <Button onClick={() => setConfirmDialogOpen(false)} color=\"primary\">\n Cancel\n </Button>\n <Button\n onClick={handleSaveResource}\n color=\"primary\"\n variant=\"contained\"\n disabled={isSaving}\n >\n {isSaving ? 'Applying...' : 'Apply Changes'}\n </Button>\n </DialogActions>\n </Dialog>\n\n {/* Snackbar for notifications */}\n <Snackbar\n open={snackbar.open}\n autoHideDuration={6000}\n onClose={handleCloseSnackbar}\n anchorOrigin={{ vertical: 'bottom', horizontal: 'left' }}\n >\n <Alert onClose={handleCloseSnackbar} severity={snackbar.severity}>\n {snackbar.message}\n </Alert>\n </Snackbar>\n </InfoCard>\n </Grid>\n </Grid>\n );\n};"],"names":["resourceContext","resourceState","syncStatus","createdAt","origin","networkInfo"],"mappings":"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"}
|