From f2da036fbee6c58583397fc223b26eb86a5ccd72 Mon Sep 17 00:00:00 2001 From: Panu Horsmalahti Date: Wed, 19 Jan 2022 13:09:45 +0200 Subject: [PATCH] Document extending KubernetesCluster in extension guides. Signed-off-by: Panu Horsmalahti --- docs/extensions/guides/README.md | 1 + .../guides/extending-kubernetes-cluster.md | 69 +++++++++++++++++++ mkdocs.yml | 1 + 3 files changed, 71 insertions(+) create mode 100644 docs/extensions/guides/extending-kubernetes-cluster.md diff --git a/docs/extensions/guides/README.md b/docs/extensions/guides/README.md index 434aec7444..09a0bce0a1 100644 --- a/docs/extensions/guides/README.md +++ b/docs/extensions/guides/README.md @@ -20,6 +20,7 @@ Each guide or code sample includes the following: | [Main process extension](main-extension.md) | Main.LensExtension | | [Renderer process extension](renderer-extension.md) | Renderer.LensExtension | | [Resource stack (cluster feature)](resource-stack.md) | | +| [Extending KubernetesCluster)](extending-kubernetes-cluster.md) | | | [Stores](stores.md) | | | [Components](components.md) | | | [KubeObjectListLayout](kube-object-list-layout.md) | | diff --git a/docs/extensions/guides/extending-kubernetes-cluster.md b/docs/extensions/guides/extending-kubernetes-cluster.md new file mode 100644 index 0000000000..5c8170a2fe --- /dev/null +++ b/docs/extensions/guides/extending-kubernetes-cluster.md @@ -0,0 +1,69 @@ +# Extending KubernetesCluster + +Extension can specify it's own subclass of Common.Catalog.KubernetesCluster. Extension can also specify a new Category for it in the Catalog. + +## Extending Common.Catalog.KubernetesCluster + +``` typescript +import { Common } from "@k8slens/extensions"; + +// The kind must be different from KubernetesCluster's kind +export const kind = "ManagedDevCluster"; + +export class ManagedDevCluster extends Common.Catalog.KubernetesCluster { + public static readonly kind = kind; + + public readonly kind = kind; +} +``` + +## Extending Common.Catalog.CatalogCategory + +These custom Catalog entities can be added a new Category in the Catalog. + +``` typescript +import { Common } from "@k8slens/extensions"; +import { kind, ManagedDevCluster } from "../entities/ManagedDevCluster"; + +class ManagedDevClusterCategory extends Common.Catalog.CatalogCategory { + public readonly apiVersion = "catalog.k8slens.dev/v1alpha1"; + public readonly kind = "CatalogCategory"; + public metadata = { + name: "Managed Dev Clusters", + icon: "" + }; + public spec: Common.Catalog.CatalogCategorySpec = { + group: "entity.k8slens.dev", + versions: [ + { + name: "v1alpha1", + entityClass: ManagedDevCluster as any, + }, + ], + names: { + kind + }, + }; +} + +export { ManagedDevClusterCategory }; +export type { ManagedDevClusterCategory as ManagedDevClusterCategoryType }; +``` + +The category needs to be registered in the `onActivate()` method both in main and renderer + +``` typescript +// in main's on onActivate +Main.Catalog.catalogCategories.add(new ManagedDevClusterCategory()); +``` + +``` typescript +// in renderer's on onActivate +Renderer.Catalog.catalogCategories.add(new ManagedDevClusterCategory()); +``` + +You can then add the entities to the Catalog as a new source: + +``` typescript +this.addCatalogSource("managedDevClusters", this.managedDevClusters); +``` diff --git a/mkdocs.yml b/mkdocs.yml index 4ed763e6d3..b869a63ee9 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,6 +24,7 @@ nav: - Renderer Extension: extensions/guides/renderer-extension.md - Catalog: extensions/guides/catalog.md - Resource Stack: extensions/guides/resource-stack.md + - Extending KubernetesCluster: extensions/guides/extending-kubernetes-cluster.md - Stores: extensions/guides/stores.md - Working with MobX: extensions/guides/working-with-mobx.md - Protocol Handlers: extensions/guides/protocol-handlers.md