@mhoshi-vm/plugin-crossplane-aws 0.1.2 → 0.1.4
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.
@@ -2,7 +2,7 @@ import { useEntity } from '@backstage/plugin-catalog-react';
|
|
2
2
|
import React, { useState, useEffect } from 'react';
|
3
3
|
import { Routes, Route } from 'react-router-dom';
|
4
4
|
import { useKubernetesObjects } from '@backstage/plugin-kubernetes';
|
5
|
-
import { Table, Page, Content, Progress, ResponseErrorPanel } from '@backstage/core-components';
|
5
|
+
import { Table, StatusOK, StatusPending, StatusAborted, Page, Content, Progress, ResponseErrorPanel } from '@backstage/core-components';
|
6
6
|
import { Grid } from '@material-ui/core';
|
7
7
|
|
8
8
|
const ResourceTable = (props) => {
|
@@ -12,16 +12,27 @@ const ResourceTable = (props) => {
|
|
12
12
|
{ title: "Name", field: "name" },
|
13
13
|
{ title: "Ready", field: "ready" },
|
14
14
|
{ title: "Synced", field: "synced" },
|
15
|
-
{ title: "
|
15
|
+
{ title: "ARN", field: "externalName" }
|
16
16
|
];
|
17
17
|
const data = [];
|
18
|
+
const statusLogo = [
|
19
|
+
{ status: "True", field: /* @__PURE__ */ React.createElement(StatusOK, null) },
|
20
|
+
{ status: "False", field: /* @__PURE__ */ React.createElement(StatusPending, null) },
|
21
|
+
{ status: void 0, field: /* @__PURE__ */ React.createElement(StatusAborted, null) }
|
22
|
+
];
|
18
23
|
resources.map((resource) => {
|
19
24
|
resource.resources.map((resourceStatus) => {
|
25
|
+
const readyIndex = statusLogo.findIndex(
|
26
|
+
(item) => item.status === resourceStatus.ready
|
27
|
+
);
|
28
|
+
const syncedIndex = statusLogo.findIndex(
|
29
|
+
(item) => item.status === resourceStatus.synced
|
30
|
+
);
|
20
31
|
data.push({
|
21
32
|
kind: resource.kind,
|
22
33
|
name: resourceStatus.name,
|
23
|
-
ready:
|
24
|
-
synced:
|
34
|
+
ready: statusLogo[readyIndex].field,
|
35
|
+
synced: statusLogo[syncedIndex].field,
|
25
36
|
externalName: resourceStatus.externalName
|
26
37
|
});
|
27
38
|
});
|
@@ -137,4 +148,4 @@ const Router = (props) => {
|
|
137
148
|
};
|
138
149
|
|
139
150
|
export { Router };
|
140
|
-
//# sourceMappingURL=Router-
|
151
|
+
//# sourceMappingURL=Router-6e363902.esm.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"Router-6e363902.esm.js","sources":["../../src/components/ResourceTable/ResourceTable.tsx","../../src/components/CrossplaneAws/CrossplaneAwsComponent.tsx","../../src/Router.tsx"],"sourcesContent":["import React from \"react\";\nimport {Resource} from \"../../type\";\nimport {StatusAborted, StatusOK, StatusPending, Table, TableColumn} from \"@backstage/core-components\";\n\nexport const ResourceTable = (props: { app: string, resources: Resource[] }) => {\n const {app, resources} = props;\n\n\n const columns: TableColumn[] = [\n {title: 'Kind', field: 'kind'},\n {title: 'Name', field: 'name'},\n {title: 'Ready', field: 'ready'},\n {title: 'Synced', field: 'synced'},\n {title: 'ARN', field: 'externalName'},\n ];\n\n const data = [] as {\n kind: string,\n name: string,\n ready: string,\n synced: string,\n externalName: string\n }[];\n\n const statusLogo = [\n {status: 'True', field: <StatusOK />},\n {status: 'False', field: <StatusPending />},\n {status: undefined, field: <StatusAborted />},\n ];\n\n resources.map(resource => {\n resource.resources.map(resourceStatus => {\n\n\n const readyIndex = statusLogo.findIndex(\n (item) => item.status === resourceStatus.ready\n )\n\n const syncedIndex = statusLogo.findIndex(\n (item) => item.status === resourceStatus.synced\n )\n data.push({\n kind: resource.kind,\n name: resourceStatus.name,\n ready: statusLogo[readyIndex].field as unknown as string,\n synced: statusLogo[syncedIndex].field as unknown as string,\n externalName: resourceStatus.externalName,\n })\n })\n });\n\n return (\n <Table\n title={app}\n columns={columns}\n data={data}\n\n />\n );\n};","import {Entity} from '@backstage/catalog-model';\nimport React, {useEffect, useState} from \"react\";\nimport {useKubernetesObjects} from \"@backstage/plugin-kubernetes\";\nimport {Ecs, Resource, ResourceStatus, UpboundAwsCrd} from \"../../type\";\nimport {FetchResponse} from \"@backstage/plugin-kubernetes-common\";\nimport {Content, Page, Progress, ResponseErrorPanel} from \"@backstage/core-components\";\nimport {Grid} from \"@material-ui/core\";\nimport {ResourceTable} from \"../ResourceTable\";\n\ntype KubernetesContentProps = {\n entity: Entity;\n refreshIntervalMs?: number;\n children?: React.ReactNode;\n}\n\nexport const CrossplaneAwsComponent = ({entity, refreshIntervalMs}: KubernetesContentProps) => {\n const {kubernetesObjects, error} = useKubernetesObjects(\n entity,\n refreshIntervalMs,\n );\n\n const [loading, setLoading] = useState(true); // State to manage loading state\n\n useEffect(() => {\n // This useEffect will run whenever kubernetesObjects changes\n // If kubernetesObjects is not undefined or null, setLoading to false\n if (kubernetesObjects !== undefined && kubernetesObjects !== null) {\n setLoading(false);\n }\n }, [kubernetesObjects]);\n\n const ecss = [] as Ecs[];\n\n if (kubernetesObjects !== undefined) {\n for (let clusterCnt = 0; clusterCnt < kubernetesObjects.items.length; clusterCnt++) {\n const customResources = kubernetesObjects?.items[clusterCnt].resources.filter(isCustomResource);\n\n // get ecsCrs\n const upboundEcsCRs = customResources?.map((r) => {\n return {...r, resources: r.resources.filter(isUpboundEcs)}\n });\n\n // flatMap\n const flattenUpboundEcsAny = upboundEcsCRs?.flatMap(({resources}) =>\n [...resources]\n ) ?? [];\n\n const ecsCrds = flattenUpboundEcsAny as UpboundAwsCrd[];\n\n for (let crdCnt = 0; crdCnt < ecsCrds.length; crdCnt++) {\n\n const appName = ecsCrds[crdCnt].metadata.labels[\"app.kubernetes.io/part-of\"]\n\n const kind = ecsCrds[crdCnt].kind\n\n const resource = {\n name: ecsCrds[crdCnt].metadata.name,\n externalName: ecsCrds[crdCnt].metadata.annotations[\"crossplane.io/external-name\"],\n } as ResourceStatus;\n\n for (let condCnt = 0; condCnt < ecsCrds[crdCnt].status.conditions.length; condCnt++) {\n const condition = ecsCrds[crdCnt].status.conditions[condCnt];\n const type = condition.type;\n switch (type) {\n case (\"Ready\"):\n resource.ready = condition.status;\n break;\n case(\"Synced\"):\n resource.synced = condition.status;\n break;\n default:\n break;\n }\n }\n\n let ecs = {} as Ecs;\n const appIndex = ecss.findIndex(\n (item) => item.name === appName\n )\n if (appIndex !== -1) {\n ecs = ecss[appIndex];\n } else {\n ecs.name = appName;\n ecs.resources = [];\n }\n\n const kindIndex = ecs.resources.findIndex(\n (item) => item.kind === kind\n )\n\n if (kindIndex !== -1) {\n ecs.resources[kindIndex].resources.push(resource);\n } else {\n ecs.resources.push({\n kind: kind,\n resources: [resource]\n })\n }\n\n if (appIndex === -1) {\n ecss.push(ecs);\n }\n }\n\n }\n }\n\n return (\n <Page themeId=\"tool\">\n <Content>\n {loading ? ( // Display progress bar while loading\n <div className=\"progress-bar-container\">\n <Progress/>\n </div>\n ) : (kubernetesObjects?.items !== undefined && ecss?.length > 0 &&\n (ecss.map((ecs) =>\n (<Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResourceTable app={ecs.name} resources={ecs.resources}/>\n </Grid>\n </Grid>)\n )))\n }\n {error !== undefined &&\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResponseErrorPanel error={(new Error(error))}/>;\n </Grid>\n </Grid>\n }\n </Content>\n </Page>\n );\n}\n\nfunction isCustomResource(n: FetchResponse) {\n return n.type === 'customresources';\n}\n\nfunction isUpboundEcs(n: any): n is Resource {\n return n.apiVersion.endsWith('aws.upbound.io/v1beta1');\n}","import {useEntity} from \"@backstage/plugin-catalog-react\";\nimport React from \"react\";\nimport {Route, Routes} from \"react-router-dom\";\nimport {CrossplaneAwsComponent} from \"./components/CrossplaneAws\";\n\nexport const Router = (props: { refreshIntervalMs?: number }) => {\n const {entity} = useEntity();\n\n\n return (\n\n <Routes>\n <Route\n path=\"/\"\n element={\n <CrossplaneAwsComponent\n entity={entity}\n refreshIntervalMs={props.refreshIntervalMs}\n />\n }\n />\n </Routes>\n\n );\n}"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
@@ -15,4 +15,4 @@ declare const EntityCrossplaneAwsContent: (props: EntityCrossplaneAwsContentProp
|
|
15
15
|
|
16
16
|
declare const TanzuAWSPlugin: AppPluginInterface;
|
17
17
|
|
18
|
-
export { EntityCrossplaneAwsContent,
|
18
|
+
export { EntityCrossplaneAwsContent, crossplaneAwsPlugin, TanzuAWSPlugin as plugin };
|
package/dist/index.esm.js
CHANGED
@@ -16,7 +16,7 @@ const crossplaneAwsPlugin = createPlugin({
|
|
16
16
|
const EntityCrossplaneAwsContent = crossplaneAwsPlugin.provide(
|
17
17
|
createRoutableExtension({
|
18
18
|
name: "EntityCrossplaneAwsContent",
|
19
|
-
component: () => import('./esm/Router-
|
19
|
+
component: () => import('./esm/Router-6e363902.esm.js').then((m) => m.Router),
|
20
20
|
mountPoint: rootRouteRef
|
21
21
|
})
|
22
22
|
);
|
@@ -34,5 +34,5 @@ const TanzuAWSPlugin = () => (context) => {
|
|
34
34
|
);
|
35
35
|
};
|
36
36
|
|
37
|
-
export { EntityCrossplaneAwsContent,
|
37
|
+
export { EntityCrossplaneAwsContent, crossplaneAwsPlugin, TanzuAWSPlugin as plugin };
|
38
38
|
//# sourceMappingURL=index.esm.js.map
|
package/package.json
CHANGED
package/src/index.ts
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
export {crossplaneAwsPlugin, EntityCrossplaneAwsContent} from './plugin';
|
2
|
-
export {TanzuAWSPlugin} from "./TanzuAWSPlugin";
|
2
|
+
export {TanzuAWSPlugin as plugin} from "./TanzuAWSPlugin";
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"Router-7e4981b2.esm.js","sources":["../../src/components/ResourceTable/ResourceTable.tsx","../../src/components/CrossplaneAws/CrossplaneAwsComponent.tsx","../../src/Router.tsx"],"sourcesContent":["import React from \"react\";\nimport {Resource} from \"../../type\";\nimport {Table, TableColumn} from \"@backstage/core-components\";\n\nexport const ResourceTable = (props: { app: string, resources: Resource[] }) => {\n const {app, resources} = props;\n\n\n const columns: TableColumn[] = [\n {title: 'Kind', field: 'kind'},\n {title: 'Name', field: 'name'},\n {title: 'Ready', field: 'ready'},\n {title: 'Synced', field: 'synced'},\n {title: 'External Name', field: 'externalName'},\n ];\n\n const data = [] as {\n kind: string,\n name: string,\n ready: string,\n synced: string,\n externalName: string\n }[];\n\n resources.map(resource => {\n resource.resources.map(resourceStatus => {\n data.push({\n kind: resource.kind,\n name: resourceStatus.name,\n ready: resourceStatus.ready,\n synced: resourceStatus.synced,\n externalName: resourceStatus.externalName,\n })\n })\n });\n\n return (\n <Table\n title={app}\n columns={columns}\n data={data}\n\n />\n );\n};","import {Entity} from '@backstage/catalog-model';\nimport React, {useEffect, useState} from \"react\";\nimport {useKubernetesObjects} from \"@backstage/plugin-kubernetes\";\nimport {Ecs, Resource, ResourceStatus, UpboundECSCrd} from \"../../type\";\nimport {FetchResponse} from \"@backstage/plugin-kubernetes-common\";\nimport {Content, Page, Progress, ResponseErrorPanel} from \"@backstage/core-components\";\nimport {Grid} from \"@material-ui/core\";\nimport {ResourceTable} from \"../ResourceTable\";\n\ntype KubernetesContentProps = {\n entity: Entity;\n refreshIntervalMs?: number;\n children?: React.ReactNode;\n}\n\nexport const CrossplaneAwsComponent = ({entity, refreshIntervalMs}: KubernetesContentProps) => {\n const {kubernetesObjects, error} = useKubernetesObjects(\n entity,\n refreshIntervalMs,\n );\n\n const [loading, setLoading] = useState(true); // State to manage loading state\n\n useEffect(() => {\n // This useEffect will run whenever kubernetesObjects changes\n // If kubernetesObjects is not undefined or null, setLoading to false\n if (kubernetesObjects !== undefined && kubernetesObjects !== null) {\n setLoading(false);\n }\n }, [kubernetesObjects]);\n\n const ecss = [] as Ecs[];\n\n if (kubernetesObjects !== undefined) {\n for (let clusterCnt = 0; clusterCnt < kubernetesObjects.items.length; clusterCnt++) {\n const customResources = kubernetesObjects?.items[clusterCnt].resources.filter(isCustomResource);\n\n // get ecsCrs\n const upboundEcsCRs = customResources?.map((r) => {\n return {...r, resources: r.resources.filter(isUpboundEcs)}\n });\n\n // flatMap\n const flattenUpboundEcsAny = upboundEcsCRs?.flatMap(({resources}) =>\n [...resources]\n ) ?? [];\n\n const ecsCrds = flattenUpboundEcsAny as UpboundECSCrd[];\n\n for (let crdCnt = 0; crdCnt < ecsCrds.length; crdCnt++) {\n\n const appName = ecsCrds[crdCnt].metadata.labels[\"app.kubernetes.io/part-of\"]\n\n const kind = ecsCrds[crdCnt].kind\n\n const resource = {\n name: ecsCrds[crdCnt].metadata.name,\n externalName: ecsCrds[crdCnt].metadata.annotations[\"crossplane.io/external-name\"],\n } as ResourceStatus;\n\n for (let condCnt = 0; condCnt < ecsCrds[crdCnt].status.conditions.length; condCnt++) {\n const condition = ecsCrds[crdCnt].status.conditions[condCnt];\n const type = condition.type;\n switch (type) {\n case (\"Ready\"):\n resource.ready = condition.status;\n break;\n case(\"Synced\"):\n resource.synced = condition.status;\n break;\n default:\n break;\n }\n }\n\n let ecs = {} as Ecs;\n const appIndex = ecss.findIndex(\n (item) => item.name === appName\n )\n if (appIndex !== -1) {\n ecs = ecss[appIndex];\n } else {\n ecs.name = appName;\n ecs.resources = [];\n }\n\n const kindIndex = ecs.resources.findIndex(\n (item) => item.kind === kind\n )\n\n if (kindIndex !== -1) {\n ecs.resources[kindIndex].resources.push(resource);\n } else {\n ecs.resources.push({\n kind: kind,\n resources: [resource]\n })\n }\n\n if (appIndex === -1) {\n ecss.push(ecs);\n }\n }\n\n }\n }\n\n return (\n <Page themeId=\"tool\">\n <Content>\n {loading ? ( // Display progress bar while loading\n <div className=\"progress-bar-container\">\n <Progress/>\n </div>\n ) : (kubernetesObjects?.items !== undefined && ecss?.length > 0 &&\n (ecss.map((ecs) =>\n (<Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResourceTable app={ecs.name} resources={ecs.resources}/>\n </Grid>\n </Grid>)\n )))\n }\n {error !== undefined &&\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <ResponseErrorPanel error={(new Error(error))}/>;\n </Grid>\n </Grid>\n }\n </Content>\n </Page>\n );\n}\n\nfunction isCustomResource(n: FetchResponse) {\n return n.type === 'customresources';\n}\n\nfunction isUpboundEcs(n: any): n is Resource {\n return n.apiVersion.endsWith('aws.upbound.io/v1beta1');\n}","import {useEntity} from \"@backstage/plugin-catalog-react\";\nimport React from \"react\";\nimport {Route, Routes} from \"react-router-dom\";\nimport {CrossplaneAwsComponent} from \"./components/CrossplaneAws\";\n\nexport const Router = (props: { refreshIntervalMs?: number }) => {\n const {entity} = useEntity();\n\n\n return (\n\n <Routes>\n <Route\n path=\"/\"\n element={\n <CrossplaneAwsComponent\n entity={entity}\n refreshIntervalMs={props.refreshIntervalMs}\n />\n }\n />\n </Routes>\n\n );\n}"],"names":[],"mappings":"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"}
|