@skyhook-io/k8s-ui 1.11.0 → 1.13.0
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/package.json +4 -4
- package/src/components/gitops/GitOpsStatusBadge.tsx +40 -0
- package/src/components/gitops/GitOpsTableView.tsx +22 -2
- package/src/components/gitops/ReconcilingIndicator.test.tsx +31 -0
- package/src/components/gitops/detail-helpers.ts +4 -1
- package/src/components/issues/severity.ts +1 -0
- package/src/components/resources/ResourcesView.empty-note.test.ts +41 -0
- package/src/components/resources/ResourcesView.tsx +412 -5
- package/src/components/resources/index.ts +27 -0
- package/src/components/resources/kyverno-legacy-action.test.ts +98 -0
- package/src/components/resources/renderers/AlertRenderer.tsx +4 -1
- package/src/components/resources/renderers/AnalysisRunRenderer.test.tsx +241 -0
- package/src/components/resources/renderers/AnalysisRunRenderer.tsx +166 -0
- package/src/components/resources/renderers/CNPGBackupRenderer.tsx +31 -2
- package/src/components/resources/renderers/CNPGClusterRenderer.test.tsx +33 -0
- package/src/components/resources/renderers/CNPGClusterRenderer.tsx +71 -4
- package/src/components/resources/renderers/CNPGDeclarativeRenderer.tsx +243 -0
- package/src/components/resources/renderers/CNPGObjectStoreRenderer.test.tsx +99 -0
- package/src/components/resources/renderers/CNPGObjectStoreRenderer.tsx +235 -0
- package/src/components/resources/renderers/CNPGPoolerRenderer.tsx +11 -0
- package/src/components/resources/renderers/CNPGScheduledBackupRenderer.tsx +23 -1
- package/src/components/resources/renderers/CNPGShared.tsx +27 -0
- package/src/components/resources/renderers/CalicoHostEndpointRenderer.tsx +71 -0
- package/src/components/resources/renderers/CalicoIPPoolRenderer.tsx +32 -0
- package/src/components/resources/renderers/CalicoNetworkPolicyDiagram.test.tsx +205 -0
- package/src/components/resources/renderers/CalicoNetworkPolicyDiagram.tsx +537 -0
- package/src/components/resources/renderers/CalicoNetworkPolicyRenderer.test.tsx +223 -0
- package/src/components/resources/renderers/CalicoNetworkPolicyRenderer.tsx +670 -0
- package/src/components/resources/renderers/CalicoTierRenderer.tsx +19 -0
- package/src/components/resources/renderers/CompositeRenderer.test.tsx +81 -0
- package/src/components/resources/renderers/CompositeRenderer.tsx +67 -7
- package/src/components/resources/renderers/FluxHelmReleaseRenderer.tsx +4 -1
- package/src/components/resources/renderers/GitRepositoryRenderer.tsx +4 -1
- package/src/components/resources/renderers/HelmRepositoryRenderer.tsx +4 -1
- package/src/components/resources/renderers/KustomizationRenderer.tsx +4 -1
- package/src/components/resources/renderers/KyvernoCELPolicyRenderers.tsx +13 -6
- package/src/components/resources/renderers/KyvernoExceptionRenderers.tsx +3 -2
- package/src/components/resources/renderers/KyvernoGlobalContextRenderer.test.ts +31 -0
- package/src/components/resources/renderers/KyvernoGlobalContextRenderer.tsx +124 -0
- package/src/components/resources/renderers/KyvernoPolicyReportRenderer.tsx +28 -2
- package/src/components/resources/renderers/KyvernoQueueRenderers.tsx +303 -0
- package/src/components/resources/renderers/LookupFailureNote.test.tsx +60 -0
- package/src/components/resources/renderers/LookupFailureNote.tsx +42 -0
- package/src/components/resources/renderers/NetworkPolicyDiagram.tsx +27 -26
- package/src/components/resources/renderers/NetworkPolicyRenderer.tsx +6 -3
- package/src/components/resources/renderers/OCIRepositoryRenderer.tsx +4 -1
- package/src/components/resources/renderers/PodRenderer.tsx +13 -0
- package/src/components/resources/renderers/PolicyCoverageSection.test.tsx +348 -0
- package/src/components/resources/renderers/PolicyCoverageSection.tsx +939 -0
- package/src/components/resources/renderers/PolicySection.test.tsx +159 -0
- package/src/components/resources/renderers/PolicySection.tsx +197 -0
- package/src/components/resources/renderers/RolloutRenderer.test.tsx +491 -0
- package/src/components/resources/renderers/RolloutRenderer.tsx +391 -92
- package/src/components/resources/renderers/VeleroBSLRenderer.test.tsx +374 -0
- package/src/components/resources/renderers/VeleroBSLRenderer.tsx +179 -3
- package/src/components/resources/renderers/VeleroBackupRenderer.test.tsx +221 -0
- package/src/components/resources/renderers/VeleroBackupRenderer.tsx +119 -6
- package/src/components/resources/renderers/VeleroBackupRepositoryRenderer.test.tsx +69 -0
- package/src/components/resources/renderers/VeleroBackupRepositoryRenderer.tsx +96 -0
- package/src/components/resources/renderers/VeleroRestoreRenderer.test.tsx +55 -0
- package/src/components/resources/renderers/VeleroRestoreRenderer.tsx +22 -4
- package/src/components/resources/renderers/VeleroRunMessages.test.tsx +152 -0
- package/src/components/resources/renderers/VeleroRunMessages.tsx +139 -0
- package/src/components/resources/renderers/VeleroScheduleRenderer.test.tsx +88 -0
- package/src/components/resources/renderers/VeleroScheduleRenderer.tsx +16 -6
- package/src/components/resources/renderers/WorkloadRenderer.tsx +15 -1
- package/src/components/resources/renderers/calico-cells.tsx +177 -0
- package/src/components/resources/renderers/cnpg-cells.tsx +100 -0
- package/src/components/resources/renderers/index.ts +16 -0
- package/src/components/resources/renderers/kyverno-cells.tsx +90 -0
- package/src/components/resources/renderers/network-policy-peer-styles.ts +25 -0
- package/src/components/resources/renderers/policyreport-subject.test.tsx +27 -0
- package/src/components/resources/renderers/velero-cells.tsx +29 -7
- package/src/components/resources/renderers/velero-dead-ends.test.tsx +142 -0
- package/src/components/resources/resource-utils-calico.test.ts +215 -0
- package/src/components/resources/resource-utils-calico.ts +261 -0
- package/src/components/resources/resource-utils-cnpg-declarative.test.ts +104 -0
- package/src/components/resources/resource-utils-cnpg-objectstore.test.ts +122 -0
- package/src/components/resources/resource-utils-cnpg.test.ts +117 -0
- package/src/components/resources/resource-utils-cnpg.ts +324 -3
- package/src/components/resources/resource-utils-crossplane.test.ts +68 -0
- package/src/components/resources/resource-utils-kyverno-modern.ts +24 -0
- package/src/components/resources/resource-utils-kyverno-queue.test.ts +164 -0
- package/src/components/resources/resource-utils-kyverno-queue.ts +198 -0
- package/src/components/resources/resource-utils-kyverno.ts +43 -7
- package/src/components/resources/resource-utils-velero.test.ts +26 -0
- package/src/components/resources/resource-utils-velero.ts +68 -0
- package/src/components/resources/resource-utils.ts +98 -0
- package/src/components/shared/ResourceActionsBar.tsx +101 -16
- package/src/components/shared/ResourceRendererDispatch.test.tsx +379 -3
- package/src/components/shared/ResourceRendererDispatch.tsx +199 -22
- package/src/components/shared/index.ts +1 -1
- package/src/components/shared/revision-role-badges.test.ts +120 -0
- package/src/components/topology/K8sResourceNode.test.ts +10 -0
- package/src/components/topology/K8sResourceNode.tsx +22 -0
- package/src/components/topology/TopologyFilterSidebar.test.tsx +31 -0
- package/src/components/topology/TopologyFilterSidebar.tsx +5 -0
- package/src/components/topology/TopologyGraph.tsx +6 -6
- package/src/components/topology/TopologySearch.tsx +7 -0
- package/src/components/topology/layout.ts +3 -0
- package/src/components/trace/ReachabilityView.tsx +1 -0
- package/src/components/trace/TracePanel.tsx +12 -2
- package/src/components/trace/reachFixtures.ts +26 -1
- package/src/components/trace/reachGraphModel.test.ts +20 -0
- package/src/components/trace/reachGraphModel.ts +8 -1
- package/src/components/trace/reachOrigins.test.ts +31 -0
- package/src/components/trace/reachOrigins.ts +11 -1
- package/src/components/ui/Badge.tsx +10 -0
- package/src/components/ui/ScheduleValue.test.tsx +80 -0
- package/src/components/ui/ScheduleValue.tsx +85 -0
- package/src/components/ui/drawer-components.test.tsx +17 -1
- package/src/components/ui/drawer-components.tsx +9 -2
- package/src/components/ui/index.ts +2 -0
- package/src/components/workload/WorkloadView.tsx +3 -0
- package/src/types/core.ts +29 -0
- package/src/types/gitops-flux-status.test.ts +163 -0
- package/src/types/gitops.ts +80 -24
- package/src/types/index.ts +1 -0
- package/src/types/policy.ts +193 -0
- package/src/utils/navigation.test.ts +5 -0
- package/src/utils/navigation.ts +5 -0
- package/src/utils/resource-icons.test.ts +49 -2
- package/src/utils/resource-icons.ts +29 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect } from 'vitest'
|
|
2
|
-
import { Database, Server, Puzzle } from 'lucide-react'
|
|
3
|
-
import { getResourceIcon, DEFAULT_RESOURCE_ICON } from './resource-icons'
|
|
2
|
+
import { Database, Network, Server, ShieldCheck, Puzzle } from 'lucide-react'
|
|
3
|
+
import { getResourceIcon, getTopologyIcon, DEFAULT_RESOURCE_ICON } from './resource-icons'
|
|
4
4
|
|
|
5
5
|
describe('getResourceIcon', () => {
|
|
6
6
|
it('disambiguates colliding kinds by API group', () => {
|
|
@@ -14,6 +14,53 @@ describe('getResourceIcon', () => {
|
|
|
14
14
|
// A third operator's `clusters` CRD must not inherit a Postgres icon.
|
|
15
15
|
expect(getResourceIcon('Cluster', 'apps.kubeblocks.io')).toBe(DEFAULT_RESOURCE_ICON)
|
|
16
16
|
expect(getResourceIcon('Backup', 'kubevirt.io')).toBe(DEFAULT_RESOURCE_ICON)
|
|
17
|
+
expect(getResourceIcon('HostEndpoint', 'networking.example.io')).toBe(DEFAULT_RESOURCE_ICON)
|
|
18
|
+
expect(getResourceIcon('IPPool', 'networking.example.io')).toBe(DEFAULT_RESOURCE_ICON)
|
|
19
|
+
expect(getResourceIcon('IPPool', 'extension.projectcalico.org')).toBe(DEFAULT_RESOURCE_ICON)
|
|
20
|
+
expect(getResourceIcon('Tier', 'extension.projectcalico.org')).toBe(DEFAULT_RESOURCE_ICON)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('resolves Calico IPPool only for Calico API groups', () => {
|
|
24
|
+
expect(getResourceIcon('IPPool', 'crd.projectcalico.org')).toBe(Network)
|
|
25
|
+
expect(getResourceIcon('IPPool', 'projectcalico.org')).toBe(Network)
|
|
26
|
+
expect(getResourceIcon('IPPool')).toBe(DEFAULT_RESOURCE_ICON)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('resolves Calico HostEndpoint only for Calico API groups', () => {
|
|
30
|
+
expect(getResourceIcon('HostEndpoint', 'crd.projectcalico.org')).toBe(Network)
|
|
31
|
+
expect(getResourceIcon('HostEndpoint', 'projectcalico.org')).toBe(Network)
|
|
32
|
+
expect(getResourceIcon('HostEndpoint')).toBe(DEFAULT_RESOURCE_ICON)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('resolves Calico Tier only for Calico API groups', () => {
|
|
36
|
+
expect(getResourceIcon('Tier', 'crd.projectcalico.org')).toBe(Network)
|
|
37
|
+
expect(getResourceIcon('Tier', 'projectcalico.org')).toBe(Network)
|
|
38
|
+
expect(getResourceIcon('Tier')).toBe(DEFAULT_RESOURCE_ICON)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('disambiguates NetworkPolicy and Calico policy kinds by API group', () => {
|
|
42
|
+
expect(getResourceIcon('NetworkPolicy', 'networking.k8s.io')).toBe(ShieldCheck)
|
|
43
|
+
expect(getResourceIcon('NetworkPolicy', 'projectcalico.org')).toBe(ShieldCheck)
|
|
44
|
+
expect(getResourceIcon('NetworkPolicy', 'crd.projectcalico.org')).toBe(ShieldCheck)
|
|
45
|
+
expect(getResourceIcon('NetworkPolicy', 'networking.example.io')).toBe(DEFAULT_RESOURCE_ICON)
|
|
46
|
+
expect(getResourceIcon('GlobalNetworkPolicy', 'projectcalico.org')).toBe(ShieldCheck)
|
|
47
|
+
expect(getResourceIcon('StagedNetworkPolicy', 'crd.projectcalico.org')).toBe(ShieldCheck)
|
|
48
|
+
expect(getResourceIcon('StagedGlobalNetworkPolicy', 'projectcalico.org')).toBe(ShieldCheck)
|
|
49
|
+
expect(getResourceIcon('StagedKubernetesNetworkPolicy', 'crd.projectcalico.org')).toBe(ShieldCheck)
|
|
50
|
+
expect(getResourceIcon('GlobalNetworkPolicy', 'networking.example.io')).toBe(DEFAULT_RESOURCE_ICON)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('uses ShieldCheck for all Calico policy topology nodes', () => {
|
|
54
|
+
for (const kind of [
|
|
55
|
+
'CalicoNetworkPolicy',
|
|
56
|
+
'CalicoGlobalNetworkPolicy',
|
|
57
|
+
'CalicoStagedNetworkPolicy',
|
|
58
|
+
'CalicoStagedGlobalNetworkPolicy',
|
|
59
|
+
'CalicoStagedKubernetesNetworkPolicy',
|
|
60
|
+
]) {
|
|
61
|
+
expect(getTopologyIcon(kind)).toBe(ShieldCheck)
|
|
62
|
+
expect(getResourceIcon(kind)).toBe(ShieldCheck)
|
|
63
|
+
}
|
|
17
64
|
})
|
|
18
65
|
|
|
19
66
|
it('ignores the group for kinds that do not collide', () => {
|
|
@@ -20,6 +20,7 @@ import {
|
|
|
20
20
|
ShieldAlert,
|
|
21
21
|
Radio,
|
|
22
22
|
Globe,
|
|
23
|
+
Network,
|
|
23
24
|
|
|
24
25
|
// Config
|
|
25
26
|
FileSliders,
|
|
@@ -96,6 +97,11 @@ const KIND_ICON_MAP: Record<string, LucideIcon> = {
|
|
|
96
97
|
service: Plug,
|
|
97
98
|
ingress: DoorOpen,
|
|
98
99
|
networkpolicy: ShieldCheck,
|
|
100
|
+
caliconetworkpolicy: ShieldCheck,
|
|
101
|
+
calicoglobalnetworkpolicy: ShieldCheck,
|
|
102
|
+
calicostagednetworkpolicy: ShieldCheck,
|
|
103
|
+
calicostagedglobalnetworkpolicy: ShieldCheck,
|
|
104
|
+
calicostagedkubernetesnetworkpolicy: ShieldCheck,
|
|
99
105
|
ciliumnetworkpolicy: ShieldCheck,
|
|
100
106
|
ciliumclusterwidenetworkpolicy: ShieldCheck,
|
|
101
107
|
clusternetworkpolicy: ShieldCheck,
|
|
@@ -291,13 +297,33 @@ const GROUP_QUALIFIED_KIND_ICONS: Record<string, Record<string, LucideIcon>> = {
|
|
|
291
297
|
backup: { 'postgresql.cnpg.io': DatabaseBackup },
|
|
292
298
|
scheduledbackup: { 'postgresql.cnpg.io': DatabaseBackup },
|
|
293
299
|
pooler: { 'postgresql.cnpg.io': Waypoints },
|
|
300
|
+
networkpolicy: {
|
|
301
|
+
'networking.k8s.io': ShieldCheck,
|
|
302
|
+
'crd.projectcalico.org': ShieldCheck,
|
|
303
|
+
'projectcalico.org': ShieldCheck,
|
|
304
|
+
},
|
|
305
|
+
hostendpoint: { 'crd.projectcalico.org': Network, 'projectcalico.org': Network },
|
|
306
|
+
ippool: { 'crd.projectcalico.org': Network, 'projectcalico.org': Network },
|
|
307
|
+
tier: { 'crd.projectcalico.org': Network, 'projectcalico.org': Network },
|
|
308
|
+
globalnetworkpolicy: { 'crd.projectcalico.org': ShieldCheck, 'projectcalico.org': ShieldCheck },
|
|
309
|
+
stagednetworkpolicy: { 'crd.projectcalico.org': ShieldCheck, 'projectcalico.org': ShieldCheck },
|
|
310
|
+
stagedglobalnetworkpolicy: { 'crd.projectcalico.org': ShieldCheck, 'projectcalico.org': ShieldCheck },
|
|
311
|
+
stagedkubernetesnetworkpolicy: { 'crd.projectcalico.org': ShieldCheck, 'projectcalico.org': ShieldCheck },
|
|
312
|
+
}
|
|
313
|
+
|
|
314
|
+
const TOPOLOGY_KIND_ICONS: Record<string, LucideIcon> = {
|
|
315
|
+
CalicoNetworkPolicy: ShieldCheck,
|
|
316
|
+
CalicoGlobalNetworkPolicy: ShieldCheck,
|
|
317
|
+
CalicoStagedNetworkPolicy: ShieldCheck,
|
|
318
|
+
CalicoStagedGlobalNetworkPolicy: ShieldCheck,
|
|
319
|
+
CalicoStagedKubernetesNetworkPolicy: ShieldCheck,
|
|
294
320
|
}
|
|
295
321
|
|
|
296
322
|
export function getResourceIcon(kind: string, group?: string): LucideIcon {
|
|
297
323
|
const k = kind.toLowerCase()
|
|
298
324
|
if (group) {
|
|
299
|
-
const
|
|
300
|
-
if (
|
|
325
|
+
const groupMap = GROUP_QUALIFIED_KIND_ICONS[k]
|
|
326
|
+
if (groupMap) return groupMap[group] ?? DEFAULT_RESOURCE_ICON
|
|
301
327
|
}
|
|
302
328
|
return KIND_ICON_MAP[k] ?? Puzzle
|
|
303
329
|
}
|
|
@@ -306,6 +332,7 @@ export function getResourceIcon(kind: string, group?: string): LucideIcon {
|
|
|
306
332
|
export function getTopologyIcon(kind: string): LucideIcon {
|
|
307
333
|
if (kind === 'Internet') return Globe
|
|
308
334
|
if (kind === 'PodGroup') return Boxes
|
|
335
|
+
if (TOPOLOGY_KIND_ICONS[kind]) return TOPOLOGY_KIND_ICONS[kind]
|
|
309
336
|
return getResourceIcon(kind)
|
|
310
337
|
}
|
|
311
338
|
|