mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Spread out impl
Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
fcccbfbbb9
commit
a341b1b44f
@ -5,10 +5,38 @@
|
|||||||
|
|
||||||
import React from "react";
|
import React from "react";
|
||||||
import type { Pod, PodVolume, PodVolumeKind } from "../../../../../common/k8s-api/endpoints";
|
import type { Pod, PodVolume, PodVolumeKind } from "../../../../../common/k8s-api/endpoints";
|
||||||
import { entries } from "../../../../utils";
|
|
||||||
import { DrawerItem } from "../../../drawer";
|
import { DrawerItem } from "../../../drawer";
|
||||||
import { Icon } from "../../../icon";
|
import { Icon } from "../../../icon";
|
||||||
import getVolumeVariantComponent from "./variants";
|
import { AwsElasticBlockStore } from "./variants/aws-elastic-block-store";
|
||||||
|
import { AzureDisk } from "./variants/azure-disk";
|
||||||
|
import { AzureFile } from "./variants/azure-file";
|
||||||
|
import { CephFs } from "./variants/ceph-fs";
|
||||||
|
import { Cinder } from "./variants/cinder";
|
||||||
|
import { ConfigMap } from "./variants/config-map";
|
||||||
|
import { ContainerStorageInterface } from "./variants/container-storage-interface";
|
||||||
|
import { DownwardApi } from "./variants/downward-api";
|
||||||
|
import { EmptyDir } from "./variants/empty-dir";
|
||||||
|
import { Ephemeral } from "./variants/ephemeral";
|
||||||
|
import { FiberChannel } from "./variants/fiber-channel";
|
||||||
|
import { FlexVolume } from "./variants/flex-volume";
|
||||||
|
import { Flocker } from "./variants/flocker";
|
||||||
|
import { GcePersistentDisk } from "./variants/gce-persistent-disk";
|
||||||
|
import { GitRepo } from "./variants/git-repo";
|
||||||
|
import { GlusterFs } from "./variants/gluster-fs";
|
||||||
|
import { HostPath } from "./variants/host-path";
|
||||||
|
import { IScsi } from "./variants/i-scsi";
|
||||||
|
import { Local } from "./variants/local";
|
||||||
|
import { NetworkFs } from "./variants/network-fs";
|
||||||
|
import { PersistentVolumeClaim } from "./variants/persistent-volume-claim";
|
||||||
|
import { PhotonPersistentDisk } from "./variants/photon-persistent-disk";
|
||||||
|
import { PortworxVolume } from "./variants/portworx-volume";
|
||||||
|
import { Projected } from "./variants/projected";
|
||||||
|
import { Quobyte } from "./variants/quobyte";
|
||||||
|
import { RadosBlockDevice } from "./variants/rados-block-device";
|
||||||
|
import { ScaleIo } from "./variants/scale-io";
|
||||||
|
import { Secret } from "./variants/secret";
|
||||||
|
import { StorageOs } from "./variants/storage-os";
|
||||||
|
import { VsphereVolume } from "./variants/vsphere-volume";
|
||||||
|
|
||||||
const deprecatedVolumeTypes = new Set<PodVolumeKind>([
|
const deprecatedVolumeTypes = new Set<PodVolumeKind>([
|
||||||
"flocker",
|
"flocker",
|
||||||
@ -22,29 +50,242 @@ interface VolumeVarientProps {
|
|||||||
volume: PodVolume;
|
volume: PodVolume;
|
||||||
}
|
}
|
||||||
|
|
||||||
export function VolumeVarient({ pod, volume }: VolumeVarientProps) {
|
interface VolumeVarientRender {
|
||||||
for (const [kind, variant] of entries(volume)) {
|
kind: PodVolumeKind;
|
||||||
if (kind === "name") {
|
element: JSX.Element;
|
||||||
continue; // This key is not a kind field
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (!variant || typeof variant !== "object") {
|
function renderVolumeVarient({ pod, volume }: VolumeVarientProps): VolumeVarientRender | null {
|
||||||
continue;
|
if (volume.awsElasticBlockStore) {
|
||||||
}
|
return {
|
||||||
|
kind: "awsElasticBlockStore",
|
||||||
const isDeprecated = deprecatedVolumeTypes.has(kind);
|
element: <AwsElasticBlockStore variant={volume.awsElasticBlockStore} pod={pod} volumeName={volume.name} />,
|
||||||
const VolumeVariantComponent = getVolumeVariantComponent(kind);
|
};
|
||||||
|
|
||||||
return (
|
|
||||||
<>
|
|
||||||
<DrawerItem name="Kind">
|
|
||||||
{kind}
|
|
||||||
{isDeprecated && <Icon title="Deprecated" material="warning_amber" />}
|
|
||||||
</DrawerItem>
|
|
||||||
<VolumeVariantComponent variant={variant} pod={pod} volumeName={volume.name} />
|
|
||||||
</>
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return <p>Error! Unknown pod volume kind</p>;
|
if (volume.azureDisk) {
|
||||||
|
return {
|
||||||
|
kind: "azureDisk",
|
||||||
|
element: <AzureDisk variant={volume.azureDisk} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.azureFile) {
|
||||||
|
return {
|
||||||
|
kind: "azureFile",
|
||||||
|
element: <AzureFile variant={volume.azureFile} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.cephfs) {
|
||||||
|
return {
|
||||||
|
kind: "cephfs",
|
||||||
|
element: <CephFs variant={volume.cephfs} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.cinder) {
|
||||||
|
return {
|
||||||
|
kind: "cinder",
|
||||||
|
element: <Cinder variant={volume.cinder} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.configMap) {
|
||||||
|
return {
|
||||||
|
kind: "configMap",
|
||||||
|
element: <ConfigMap variant={volume.configMap} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.csi) {
|
||||||
|
return {
|
||||||
|
kind: "csi",
|
||||||
|
element: <ContainerStorageInterface variant={volume.csi} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.downwardAPI) {
|
||||||
|
return {
|
||||||
|
kind: "downwardAPI",
|
||||||
|
element: <DownwardApi variant={volume.downwardAPI} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.emptyDir) {
|
||||||
|
return {
|
||||||
|
kind: "emptyDir",
|
||||||
|
element: <EmptyDir variant={volume.emptyDir} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.ephemeral) {
|
||||||
|
return {
|
||||||
|
kind: "ephemeral",
|
||||||
|
element: <Ephemeral variant={volume.ephemeral} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.fc) {
|
||||||
|
return {
|
||||||
|
kind: "fc",
|
||||||
|
element: <FiberChannel variant={volume.fc} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.flexVolume) {
|
||||||
|
return {
|
||||||
|
kind: "flexVolume",
|
||||||
|
element: <FlexVolume variant={volume.flexVolume} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.flocker) {
|
||||||
|
return {
|
||||||
|
kind: "flocker",
|
||||||
|
element: <Flocker variant={volume.flocker} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.gcePersistentDisk) {
|
||||||
|
return {
|
||||||
|
kind: "gcePersistentDisk",
|
||||||
|
element: <GcePersistentDisk variant={volume.gcePersistentDisk} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.gitRepo) {
|
||||||
|
return {
|
||||||
|
kind: "gitRepo",
|
||||||
|
element: <GitRepo variant={volume.gitRepo} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.glusterfs) {
|
||||||
|
return {
|
||||||
|
kind: "glusterfs",
|
||||||
|
element: <GlusterFs variant={volume.glusterfs} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.hostPath) {
|
||||||
|
return {
|
||||||
|
kind: "hostPath",
|
||||||
|
element: <HostPath variant={volume.hostPath} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.iscsi) {
|
||||||
|
return {
|
||||||
|
kind: "iscsi",
|
||||||
|
element: <IScsi variant={volume.iscsi} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.local) {
|
||||||
|
return {
|
||||||
|
kind: "local",
|
||||||
|
element: <Local variant={volume.local} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.nfs) {
|
||||||
|
return {
|
||||||
|
kind: "nfs",
|
||||||
|
element: <NetworkFs variant={volume.nfs} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.persistentVolumeClaim) {
|
||||||
|
return {
|
||||||
|
kind: "persistentVolumeClaim",
|
||||||
|
element: <PersistentVolumeClaim variant={volume.persistentVolumeClaim} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.photonPersistentDisk) {
|
||||||
|
return {
|
||||||
|
kind: "photonPersistentDisk",
|
||||||
|
element: <PhotonPersistentDisk variant={volume.photonPersistentDisk} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.portworxVolume) {
|
||||||
|
return {
|
||||||
|
kind: "portworxVolume",
|
||||||
|
element: <PortworxVolume variant={volume.portworxVolume} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.projected) {
|
||||||
|
return {
|
||||||
|
kind: "projected",
|
||||||
|
element: <Projected variant={volume.projected} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.quobyte) {
|
||||||
|
return {
|
||||||
|
kind: "quobyte",
|
||||||
|
element: <Quobyte variant={volume.quobyte} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.rbd) {
|
||||||
|
return {
|
||||||
|
kind: "rbd",
|
||||||
|
element: <RadosBlockDevice variant={volume.rbd} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.scaleIO) {
|
||||||
|
return {
|
||||||
|
kind: "scaleIO",
|
||||||
|
element: <ScaleIo variant={volume.scaleIO} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.secret) {
|
||||||
|
return {
|
||||||
|
kind: "secret",
|
||||||
|
element: <Secret variant={volume.secret} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.storageos) {
|
||||||
|
return {
|
||||||
|
kind: "storageos",
|
||||||
|
element: <StorageOs variant={volume.storageos} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (volume.vsphereVolume) {
|
||||||
|
return {
|
||||||
|
kind: "vsphereVolume",
|
||||||
|
element: <VsphereVolume variant={volume.vsphereVolume} pod={pod} volumeName={volume.name} />,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
export function VolumeVarient(props: VolumeVarientProps) {
|
||||||
|
const result = renderVolumeVarient(props);
|
||||||
|
|
||||||
|
if (!result) {
|
||||||
|
return <p>Error! Unknown pod volume kind</p>;
|
||||||
|
}
|
||||||
|
|
||||||
|
const { kind, element } = result;
|
||||||
|
const isDeprecated = deprecatedVolumeTypes.has(kind);
|
||||||
|
|
||||||
|
return (
|
||||||
|
<>
|
||||||
|
<DrawerItem name="Kind">
|
||||||
|
{kind}
|
||||||
|
{isDeprecated && <Icon title="Deprecated" material="warning_amber" />}
|
||||||
|
</DrawerItem>
|
||||||
|
{element}
|
||||||
|
</>
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,80 +0,0 @@
|
|||||||
/**
|
|
||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
import React from "react";
|
|
||||||
import type { PodVolumeKind, PodVolumeVariants } from "../../../../../common/k8s-api/endpoints";
|
|
||||||
import type { VolumeVariantComponent } from "./variant-helpers";
|
|
||||||
import { AwsElasticBlockStore } from "./variants/aws-elastic-block-store";
|
|
||||||
import { AzureDisk } from "./variants/azure-disk";
|
|
||||||
import { AzureFile } from "./variants/azure-file";
|
|
||||||
import { CephFs } from "./variants/ceph-fs";
|
|
||||||
import { Cinder } from "./variants/cinder";
|
|
||||||
import { ConfigMap } from "./variants/config-map";
|
|
||||||
import { ContainerStorageInterface } from "./variants/container-storage-interface";
|
|
||||||
import { DownwardApi } from "./variants/downward-api";
|
|
||||||
import { EmptyDir } from "./variants/empty-dir";
|
|
||||||
import { Ephemeral } from "./variants/ephemeral";
|
|
||||||
import { FiberChannel } from "./variants/fiber-channel";
|
|
||||||
import { FlexVolume } from "./variants/flex-volume";
|
|
||||||
import { Flocker } from "./variants/flocker";
|
|
||||||
import { GcePersistentDisk } from "./variants/gce-persistent-disk";
|
|
||||||
import { GitRepo } from "./variants/git-repo";
|
|
||||||
import { GlusterFs } from "./variants/gluster-fs";
|
|
||||||
import { HostPath } from "./variants/host-path";
|
|
||||||
import { IScsi } from "./variants/i-scsi";
|
|
||||||
import { Local } from "./variants/local";
|
|
||||||
import { NetworkFs } from "./variants/network-fs";
|
|
||||||
import { PersistentVolumeClaim } from "./variants/persistent-volume-claim";
|
|
||||||
import { PhotonPersistentDisk } from "./variants/photon-persistent-disk";
|
|
||||||
import { PortworxVolume } from "./variants/portworx-volume";
|
|
||||||
import { Projected } from "./variants/projected";
|
|
||||||
import { Quobyte } from "./variants/quobyte";
|
|
||||||
import { RadosBlockDevice } from "./variants/rados-block-device";
|
|
||||||
import { ScaleIo } from "./variants/scale-io";
|
|
||||||
import { Secret } from "./variants/secret";
|
|
||||||
import { StorageOs } from "./variants/storage-os";
|
|
||||||
import { VsphereVolume } from "./variants/vsphere-volume";
|
|
||||||
|
|
||||||
const variantComponents = new Map<PodVolumeKind, VolumeVariantComponent<keyof PodVolumeVariants>>([
|
|
||||||
["awsElasticBlockStore", AwsElasticBlockStore],
|
|
||||||
["azureDisk", AzureDisk],
|
|
||||||
["azureFile", AzureFile],
|
|
||||||
["cephfs", CephFs],
|
|
||||||
["cinder", Cinder],
|
|
||||||
["configMap", ConfigMap],
|
|
||||||
["csi", ContainerStorageInterface],
|
|
||||||
["downwardAPI", DownwardApi],
|
|
||||||
["emptyDir", EmptyDir],
|
|
||||||
["ephemeral", Ephemeral],
|
|
||||||
["fc", FiberChannel],
|
|
||||||
["flexVolume", FlexVolume],
|
|
||||||
["flocker", Flocker],
|
|
||||||
["gcePersistentDisk", GcePersistentDisk],
|
|
||||||
["gitRepo", GitRepo],
|
|
||||||
["glusterfs", GlusterFs],
|
|
||||||
["hostPath", HostPath],
|
|
||||||
["iscsi", IScsi],
|
|
||||||
["local", Local],
|
|
||||||
["nfs", NetworkFs],
|
|
||||||
["persistentVolumeClaim", PersistentVolumeClaim],
|
|
||||||
["photonPersistentDisk", PhotonPersistentDisk],
|
|
||||||
["portworxVolume", PortworxVolume],
|
|
||||||
["projected", Projected],
|
|
||||||
["quobyte", Quobyte],
|
|
||||||
["rbd", RadosBlockDevice],
|
|
||||||
["scaleIO", ScaleIo],
|
|
||||||
["secret", Secret],
|
|
||||||
["storageos", StorageOs],
|
|
||||||
["vsphereVolume", VsphereVolume],
|
|
||||||
]);
|
|
||||||
|
|
||||||
|
|
||||||
export default function getVolumeVariantComponent(kind: PodVolumeKind) {
|
|
||||||
const NotSupported: VolumeVariantComponent<keyof PodVolumeVariants> = (
|
|
||||||
() => <p>Variant {kind} is not yet supported</p>
|
|
||||||
);
|
|
||||||
|
|
||||||
return variantComponents.get(kind) ?? NotSupported;
|
|
||||||
}
|
|
||||||
Loading…
Reference in New Issue
Block a user