@backstage/plugin-kubernetes 0.7.2 → 0.7.3-next.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/CHANGELOG.md +28 -0
- package/dist/index.d.ts +10 -2
- package/dist/index.esm.js +75 -48
- package/dist/index.esm.js.map +1 -1
- package/package.json +13 -14
- package/LICENSE +0 -201
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,33 @@
|
|
|
1
1
|
# @backstage/plugin-kubernetes
|
|
2
2
|
|
|
3
|
+
## 0.7.3-next.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Updated dependencies
|
|
8
|
+
- @backstage/plugin-catalog-react@1.2.0-next.1
|
|
9
|
+
- @backstage/core-components@0.11.2-next.1
|
|
10
|
+
- @backstage/core-plugin-api@1.0.7-next.1
|
|
11
|
+
- @backstage/catalog-model@1.1.2-next.1
|
|
12
|
+
- @backstage/config@1.0.3-next.1
|
|
13
|
+
- @backstage/theme@0.2.16
|
|
14
|
+
- @backstage/plugin-kubernetes-common@0.4.3-next.1
|
|
15
|
+
|
|
16
|
+
## 0.7.3-next.0
|
|
17
|
+
|
|
18
|
+
### Patch Changes
|
|
19
|
+
|
|
20
|
+
- 51af8361de: Add useCustomResources react hook for fetching Kubernetes Custom Resources
|
|
21
|
+
- 35a6cfe257: Fix infinite call bug in `useCustomResources` hook
|
|
22
|
+
- Updated dependencies
|
|
23
|
+
- @backstage/catalog-model@1.1.2-next.0
|
|
24
|
+
- @backstage/core-components@0.11.2-next.0
|
|
25
|
+
- @backstage/plugin-catalog-react@1.1.5-next.0
|
|
26
|
+
- @backstage/plugin-kubernetes-common@0.4.3-next.0
|
|
27
|
+
- @backstage/config@1.0.3-next.0
|
|
28
|
+
- @backstage/core-plugin-api@1.0.7-next.0
|
|
29
|
+
- @backstage/theme@0.2.16
|
|
30
|
+
|
|
3
31
|
## 0.7.2
|
|
4
32
|
|
|
5
33
|
### Patch Changes
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
3
3
|
import { DiscoveryApi, IdentityApi, OAuthApi, OpenIdConnectApi } from '@backstage/core-plugin-api';
|
|
4
4
|
import { Entity } from '@backstage/catalog-model';
|
|
5
|
-
import { KubernetesRequestBody, ObjectsByEntityResponse, WorkloadsByEntityRequest, CustomObjectsByEntityRequest, ClusterObjects, ClientPodStatus, ClusterAttributes } from '@backstage/plugin-kubernetes-common';
|
|
5
|
+
import { KubernetesRequestBody, ObjectsByEntityResponse, WorkloadsByEntityRequest, CustomObjectsByEntityRequest, ClusterObjects, CustomResourceMatcher, ClientPodStatus, ClusterAttributes } from '@backstage/plugin-kubernetes-common';
|
|
6
6
|
import { JsonObject } from '@backstage/types';
|
|
7
7
|
import { V1Pod, V1ReplicaSet, V1Deployment, V1HorizontalPodAutoscaler, V1Service, V1ConfigMap, V1Ingress, V1Job, V1CronJob, V1StatefulSet, V1ObjectMeta } from '@kubernetes/client-node';
|
|
8
8
|
import React from 'react';
|
|
@@ -251,10 +251,18 @@ declare const KubernetesContent: ({ entity, refreshIntervalMs, }: KubernetesCont
|
|
|
251
251
|
|
|
252
252
|
interface KubernetesObjects {
|
|
253
253
|
kubernetesObjects?: ObjectsByEntityResponse;
|
|
254
|
+
loading: boolean;
|
|
254
255
|
error?: string;
|
|
255
256
|
}
|
|
256
257
|
declare const useKubernetesObjects: (entity: Entity, intervalMs?: number) => KubernetesObjects;
|
|
257
258
|
|
|
259
|
+
/**
|
|
260
|
+
* Retrieves the provided custom resources related to the provided entity, refreshes at an interval.
|
|
261
|
+
*
|
|
262
|
+
* @public
|
|
263
|
+
*/
|
|
264
|
+
declare const useCustomResources: (entity: Entity, customResourceMatchers: CustomResourceMatcher[], intervalMs?: number) => KubernetesObjects;
|
|
265
|
+
|
|
258
266
|
declare const PodNamesWithErrorsContext: React.Context<Set<string>>;
|
|
259
267
|
|
|
260
268
|
declare const PodNamesWithMetricsContext: React.Context<Map<string, ClientPodStatus>>;
|
|
@@ -263,4 +271,4 @@ declare const GroupedResponsesContext: React.Context<GroupedResponses>;
|
|
|
263
271
|
|
|
264
272
|
declare const ClusterContext: React.Context<ClusterAttributes>;
|
|
265
273
|
|
|
266
|
-
export { Cluster, ClusterContext, ClusterLinksFormatter, ClusterLinksFormatterOptions, CronJobsAccordions, CustomResources, DeploymentResources, DetectedError, DetectedErrorsByCluster, EntityKubernetesContent, EntityKubernetesContentProps, ErrorDetectableKind, ErrorPanel, ErrorReporting, ErrorSeverity, GoogleKubernetesAuthProvider, GroupedResponses, GroupedResponsesContext, HorizontalPodAutoscalerDrawer, IngressesAccordions, JobsAccordions, KubernetesApi, KubernetesAuthProviders, KubernetesAuthProvidersApi, KubernetesBackendClient, KubernetesContent, KubernetesDrawer, KubernetesObjects, PodDrawer, PodNamesWithErrorsContext, PodNamesWithMetricsContext, PodsTable, Router, ServerSideKubernetesAuthProvider, ServicesAccordions, clusterLinksFormatters, detectErrors, formatClusterLink, isKubernetesAvailable, kubernetesApiRef, kubernetesAuthProvidersApiRef, kubernetesPlugin, kubernetesPlugin as plugin, useKubernetesObjects };
|
|
274
|
+
export { Cluster, ClusterContext, ClusterLinksFormatter, ClusterLinksFormatterOptions, CronJobsAccordions, CustomResources, DeploymentResources, DetectedError, DetectedErrorsByCluster, EntityKubernetesContent, EntityKubernetesContentProps, ErrorDetectableKind, ErrorPanel, ErrorReporting, ErrorSeverity, GoogleKubernetesAuthProvider, GroupedResponses, GroupedResponsesContext, HorizontalPodAutoscalerDrawer, IngressesAccordions, JobsAccordions, KubernetesApi, KubernetesAuthProviders, KubernetesAuthProvidersApi, KubernetesBackendClient, KubernetesContent, KubernetesDrawer, KubernetesObjects, PodDrawer, PodNamesWithErrorsContext, PodNamesWithMetricsContext, PodsTable, Router, ServerSideKubernetesAuthProvider, ServicesAccordions, clusterLinksFormatters, detectErrors, formatClusterLink, isKubernetesAvailable, kubernetesApiRef, kubernetesAuthProvidersApiRef, kubernetesPlugin, kubernetesPlugin as plugin, useCustomResources, useKubernetesObjects };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { stringifyEntityRef } from '@backstage/catalog-model';
|
|
2
2
|
import { createApiRef, createRouteRef, createPlugin, createApiFactory, discoveryApiRef, identityApiRef, googleAuthApiRef, microsoftAuthApiRef, oktaAuthApiRef, oneloginAuthApiRef, createRoutableExtension, useApi } from '@backstage/core-plugin-api';
|
|
3
3
|
import * as React from 'react';
|
|
4
|
-
import React__default, { Fragment,
|
|
4
|
+
import React__default, { Fragment, useCallback, useState, useContext } from 'react';
|
|
5
5
|
import { useEntity } from '@backstage/plugin-catalog-react';
|
|
6
6
|
import { Routes, Route } from 'react-router-dom';
|
|
7
7
|
import { Typography, Chip, Grid, makeStyles, createStyles, Button, Drawer, IconButton, FormControlLabel, Switch, Accordion, AccordionSummary, AccordionDetails, Divider, Stepper, Step, StepLabel } from '@material-ui/core';
|
|
@@ -13,6 +13,7 @@ import OpenInNewIcon from '@material-ui/icons/OpenInNew';
|
|
|
13
13
|
import { withStyles } from '@material-ui/core/styles';
|
|
14
14
|
import jsYaml from 'js-yaml';
|
|
15
15
|
import useInterval from 'react-use/lib/useInterval';
|
|
16
|
+
import useAsyncRetry from 'react-use/lib/useAsyncRetry';
|
|
16
17
|
import cronstrue from 'cronstrue';
|
|
17
18
|
import lodash from 'lodash';
|
|
18
19
|
import PauseIcon from '@material-ui/icons/Pause';
|
|
@@ -711,57 +712,83 @@ const detectErrors = (objects) => {
|
|
|
711
712
|
return errors;
|
|
712
713
|
};
|
|
713
714
|
|
|
715
|
+
const generateAuth = async (entity, kubernetesApi, kubernetesAuthProvidersApi) => {
|
|
716
|
+
var _a;
|
|
717
|
+
const clusters = await kubernetesApi.getClusters();
|
|
718
|
+
const authProviders = [
|
|
719
|
+
...new Set(
|
|
720
|
+
clusters.map(
|
|
721
|
+
(c) => `${c.authProvider}${c.oidcTokenProvider ? `.${c.oidcTokenProvider}` : ""}`
|
|
722
|
+
)
|
|
723
|
+
)
|
|
724
|
+
];
|
|
725
|
+
let requestBody = {
|
|
726
|
+
entity
|
|
727
|
+
};
|
|
728
|
+
for (const authProviderStr of authProviders) {
|
|
729
|
+
requestBody = await kubernetesAuthProvidersApi.decorateRequestBodyForAuth(
|
|
730
|
+
authProviderStr,
|
|
731
|
+
requestBody
|
|
732
|
+
);
|
|
733
|
+
}
|
|
734
|
+
return (_a = requestBody.auth) != null ? _a : {};
|
|
735
|
+
};
|
|
736
|
+
|
|
714
737
|
const useKubernetesObjects = (entity, intervalMs = 1e4) => {
|
|
715
738
|
const kubernetesApi = useApi(kubernetesApiRef);
|
|
716
739
|
const kubernetesAuthProvidersApi = useApi(kubernetesAuthProvidersApiRef);
|
|
717
|
-
const
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
} catch (e) {
|
|
726
|
-
setResult({ error: e.message });
|
|
727
|
-
return;
|
|
728
|
-
}
|
|
729
|
-
const authProviders = [
|
|
730
|
-
...new Set(
|
|
731
|
-
clusters.map(
|
|
732
|
-
(c) => `${c.authProvider}${c.oidcTokenProvider ? `.${c.oidcTokenProvider}` : ""}`
|
|
733
|
-
)
|
|
734
|
-
)
|
|
735
|
-
];
|
|
736
|
-
let requestBody = {
|
|
740
|
+
const getObjects = useCallback(async () => {
|
|
741
|
+
const auth = await generateAuth(
|
|
742
|
+
entity,
|
|
743
|
+
kubernetesApi,
|
|
744
|
+
kubernetesAuthProvidersApi
|
|
745
|
+
);
|
|
746
|
+
return await kubernetesApi.getObjectsByEntity({
|
|
747
|
+
auth,
|
|
737
748
|
entity
|
|
738
|
-
};
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
749
|
+
});
|
|
750
|
+
}, [kubernetesApi, entity, kubernetesAuthProvidersApi]);
|
|
751
|
+
const { value, loading, error, retry } = useAsyncRetry(
|
|
752
|
+
() => getObjects(),
|
|
753
|
+
[getObjects]
|
|
754
|
+
);
|
|
755
|
+
useInterval(() => retry(), intervalMs);
|
|
756
|
+
return {
|
|
757
|
+
kubernetesObjects: value,
|
|
758
|
+
loading,
|
|
759
|
+
error: error == null ? void 0 : error.message
|
|
760
|
+
};
|
|
761
|
+
};
|
|
762
|
+
|
|
763
|
+
const useCustomResources = (entity, customResourceMatchers, intervalMs = 1e4) => {
|
|
764
|
+
const kubernetesApi = useApi(kubernetesApiRef);
|
|
765
|
+
const kubernetesAuthProvidersApi = useApi(kubernetesAuthProvidersApiRef);
|
|
766
|
+
const matchersString = JSON.stringify(customResourceMatchers);
|
|
767
|
+
const getCustomObjects = useCallback(
|
|
768
|
+
async () => {
|
|
769
|
+
const auth = await generateAuth(
|
|
770
|
+
entity,
|
|
771
|
+
kubernetesApi,
|
|
772
|
+
kubernetesAuthProvidersApi
|
|
773
|
+
);
|
|
774
|
+
return await kubernetesApi.getCustomObjectsByEntity({
|
|
775
|
+
auth,
|
|
776
|
+
customResources: customResourceMatchers,
|
|
777
|
+
entity
|
|
778
|
+
});
|
|
779
|
+
},
|
|
780
|
+
[kubernetesApi, entity, kubernetesAuthProvidersApi, matchersString]
|
|
781
|
+
);
|
|
782
|
+
const { value, loading, error, retry } = useAsyncRetry(
|
|
783
|
+
() => getCustomObjects(),
|
|
784
|
+
[getCustomObjects]
|
|
785
|
+
);
|
|
786
|
+
useInterval(() => retry(), intervalMs);
|
|
787
|
+
return {
|
|
788
|
+
kubernetesObjects: value,
|
|
789
|
+
loading,
|
|
790
|
+
error: error == null ? void 0 : error.message
|
|
757
791
|
};
|
|
758
|
-
useEffect(() => {
|
|
759
|
-
getObjects();
|
|
760
|
-
}, [entity.metadata.name, kubernetesApi, kubernetesAuthProvidersApi]);
|
|
761
|
-
useInterval(() => {
|
|
762
|
-
getObjects();
|
|
763
|
-
}, intervalMs);
|
|
764
|
-
return result;
|
|
765
792
|
};
|
|
766
793
|
|
|
767
794
|
const PodNamesWithErrorsContext = React__default.createContext(
|
|
@@ -2649,5 +2676,5 @@ var Router$1 = /*#__PURE__*/Object.freeze({
|
|
|
2649
2676
|
Router: Router
|
|
2650
2677
|
});
|
|
2651
2678
|
|
|
2652
|
-
export { Cluster, ClusterContext, CronJobsAccordions, CustomResources, EntityKubernetesContent, ErrorPanel$1 as ErrorPanel, ErrorReporting, GoogleKubernetesAuthProvider, GroupedResponsesContext, HorizontalPodAutoscalerDrawer, IngressesAccordions, JobsAccordions, KubernetesAuthProviders, KubernetesBackendClient, KubernetesContent, KubernetesDrawer, PodDrawer, PodNamesWithErrorsContext, PodNamesWithMetricsContext, PodsTable, Router, ServerSideKubernetesAuthProvider, ServicesAccordions, clusterLinksFormatters, detectErrors, formatClusterLink, isKubernetesAvailable, kubernetesApiRef, kubernetesAuthProvidersApiRef, kubernetesPlugin, kubernetesPlugin as plugin, useKubernetesObjects };
|
|
2679
|
+
export { Cluster, ClusterContext, CronJobsAccordions, CustomResources, EntityKubernetesContent, ErrorPanel$1 as ErrorPanel, ErrorReporting, GoogleKubernetesAuthProvider, GroupedResponsesContext, HorizontalPodAutoscalerDrawer, IngressesAccordions, JobsAccordions, KubernetesAuthProviders, KubernetesBackendClient, KubernetesContent, KubernetesDrawer, PodDrawer, PodNamesWithErrorsContext, PodNamesWithMetricsContext, PodsTable, Router, ServerSideKubernetesAuthProvider, ServicesAccordions, clusterLinksFormatters, detectErrors, formatClusterLink, isKubernetesAvailable, kubernetesApiRef, kubernetesAuthProvidersApiRef, kubernetesPlugin, kubernetesPlugin as plugin, useCustomResources, useKubernetesObjects };
|
|
2653
2680
|
//# sourceMappingURL=index.esm.js.map
|