mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
sync fixes
Signed-off-by: Jari Kolehmainen <jari.kolehmainen@gmail.com>
This commit is contained in:
parent
10fee4a451
commit
87f5673576
@ -21,6 +21,7 @@ export class CatalogPusher {
|
|||||||
}
|
}
|
||||||
|
|
||||||
broadcast() {
|
broadcast() {
|
||||||
|
console.log("BROADCAST", toJS(this.catalog.items, { recurseEverything: true }));
|
||||||
broadcastMessage("catalog:items", toJS(this.catalog.items, { recurseEverything: true }));
|
broadcastMessage("catalog:items", toJS(this.catalog.items, { recurseEverything: true }));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,8 @@ import { CatalogEntity } from "../common/catalog-entity";
|
|||||||
import { KubernetesCluster } from "../common/catalog-entities/kubernetes-cluster";
|
import { KubernetesCluster } from "../common/catalog-entities/kubernetes-cluster";
|
||||||
import { catalogEntityRegistry } from "../common/catalog-entity-registry";
|
import { catalogEntityRegistry } from "../common/catalog-entity-registry";
|
||||||
|
|
||||||
|
const clusterOwnerRef = "ClusterManager";
|
||||||
|
|
||||||
export class ClusterManager extends Singleton {
|
export class ClusterManager extends Singleton {
|
||||||
@observable.deep catalogSource: CatalogEntity[] = [];
|
@observable.deep catalogSource: CatalogEntity[] = [];
|
||||||
|
|
||||||
@ -33,6 +35,10 @@ export class ClusterManager extends Singleton {
|
|||||||
this.updateCatalogSource(clusterStore.enabledClustersList);
|
this.updateCatalogSource(clusterStore.enabledClustersList);
|
||||||
}, { fireImmediately: true });
|
}, { fireImmediately: true });
|
||||||
|
|
||||||
|
reaction(() => catalogEntityRegistry.getItemsForApiKind<KubernetesCluster>("entity.k8slens.dev/v1alpha1", "KubernetesCluster"), (entities) => {
|
||||||
|
this.syncClustersFromCatalog(entities);
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
// auto-stop removed clusters
|
// auto-stop removed clusters
|
||||||
autorun(() => {
|
autorun(() => {
|
||||||
@ -69,12 +75,49 @@ export class ClusterManager extends Singleton {
|
|||||||
if (entityIndex === -1) {
|
if (entityIndex === -1) {
|
||||||
this.catalogSource.push(newEntity);
|
this.catalogSource.push(newEntity);
|
||||||
} else {
|
} else {
|
||||||
|
const oldEntity = this.catalogSource[entityIndex];
|
||||||
|
|
||||||
|
newEntity.status.phase = cluster.disconnected ? "disconnected" : "connected";
|
||||||
newEntity.status.active = !cluster.disconnected;
|
newEntity.status.active = !cluster.disconnected;
|
||||||
|
newEntity.metadata.labels = {
|
||||||
|
...newEntity.metadata.labels,
|
||||||
|
...oldEntity.metadata.labels
|
||||||
|
};
|
||||||
this.catalogSource.splice(entityIndex, 1, newEntity);
|
this.catalogSource.splice(entityIndex, 1, newEntity);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@action syncClustersFromCatalog(entities: KubernetesCluster[]) {
|
||||||
|
entities.filter((entity) => entity.metadata.source !== "local").forEach((entity: KubernetesCluster) => {
|
||||||
|
const cluster = clusterStore.getById(entity.metadata.uid);
|
||||||
|
|
||||||
|
if (!cluster) {
|
||||||
|
clusterStore.addCluster({
|
||||||
|
id: entity.metadata.uid,
|
||||||
|
enabled: true,
|
||||||
|
ownerRef: clusterOwnerRef,
|
||||||
|
preferences: {
|
||||||
|
clusterName: entity.metadata.name
|
||||||
|
},
|
||||||
|
kubeConfigPath: entity.spec.kubeconfigPath,
|
||||||
|
contextName: entity.spec.kubeconfigContext
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
cluster.enabled = true;
|
||||||
|
if (!cluster.ownerRef) cluster.ownerRef = clusterOwnerRef;
|
||||||
|
cluster.preferences.clusterName = entity.metadata.name;
|
||||||
|
cluster.kubeConfigPath = entity.spec.kubeconfigPath;
|
||||||
|
cluster.contextName = entity.spec.kubeconfigContext;
|
||||||
|
|
||||||
|
entity.status = {
|
||||||
|
phase: cluster.disconnected ? "disconnected" : "connected",
|
||||||
|
active: !cluster.disconnected
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
protected catalogEntityFromCluster(cluster: Cluster) {
|
protected catalogEntityFromCluster(cluster: Cluster) {
|
||||||
return new KubernetesCluster(toJS({
|
return new KubernetesCluster(toJS({
|
||||||
apiVersion: "entity.k8slens.dev/v1alpha1",
|
apiVersion: "entity.k8slens.dev/v1alpha1",
|
||||||
|
|||||||
@ -22,7 +22,7 @@ export class CatalogEntityItem implements ItemObject {
|
|||||||
return this.id;
|
return this.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
get phase() {
|
@computed get phase() {
|
||||||
return this.entity.status.phase;
|
return this.entity.status.phase;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,6 +38,10 @@ export class CatalogEntityItem implements ItemObject {
|
|||||||
return labels;
|
return labels;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get source() {
|
||||||
|
return this.entity.metadata.source || "unknown";
|
||||||
|
}
|
||||||
|
|
||||||
onRun(ctx: any) {
|
onRun(ctx: any) {
|
||||||
this.entity.onRun(ctx);
|
this.entity.onRun(ctx);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,7 +2,7 @@ import "./landing-page.scss";
|
|||||||
import React from "react";
|
import React from "react";
|
||||||
import { observer } from "mobx-react";
|
import { observer } from "mobx-react";
|
||||||
import { ItemListLayout } from "../item-object-list";
|
import { ItemListLayout } from "../item-object-list";
|
||||||
import { IReactionDisposer, observable, reaction, toJS } from "mobx";
|
import { IReactionDisposer, observable } from "mobx";
|
||||||
import { CatalogEntityItem, CatalogEntityStore } from "./catalog-entity.store";
|
import { CatalogEntityItem, CatalogEntityStore } from "./catalog-entity.store";
|
||||||
import { navigate } from "../../navigation";
|
import { navigate } from "../../navigation";
|
||||||
import { kebabCase } from "lodash";
|
import { kebabCase } from "lodash";
|
||||||
@ -17,6 +17,7 @@ import { autobind } from "../../utils";
|
|||||||
|
|
||||||
enum sortBy {
|
enum sortBy {
|
||||||
name = "name",
|
name = "name",
|
||||||
|
source = "source",
|
||||||
status = "status"
|
status = "status"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -100,15 +101,18 @@ export class LandingPage extends React.Component {
|
|||||||
store={this.catalogEntityStore}
|
store={this.catalogEntityStore}
|
||||||
sortingCallbacks={{
|
sortingCallbacks={{
|
||||||
[sortBy.name]: (item: CatalogEntityItem) => item.name,
|
[sortBy.name]: (item: CatalogEntityItem) => item.name,
|
||||||
|
[sortBy.source]: (item: CatalogEntityItem) => item.source,
|
||||||
[sortBy.status]: (item: CatalogEntityItem) => item.phase,
|
[sortBy.status]: (item: CatalogEntityItem) => item.phase,
|
||||||
}}
|
}}
|
||||||
renderTableHeader={[
|
renderTableHeader={[
|
||||||
{ title: "Name", className: "name", sortBy: sortBy.name },
|
{ title: "Name", className: "name", sortBy: sortBy.name },
|
||||||
|
{ title: "Source", className: "source" },
|
||||||
{ title: "Labels", className: "labels" },
|
{ title: "Labels", className: "labels" },
|
||||||
{ title: "Status", className: "status", sortBy: sortBy.status },
|
{ title: "Status", className: "status", sortBy: sortBy.status },
|
||||||
]}
|
]}
|
||||||
renderTableContents={(item: CatalogEntityItem) => [
|
renderTableContents={(item: CatalogEntityItem) => [
|
||||||
item.name,
|
item.name,
|
||||||
|
item.source,
|
||||||
item.labels.map((label) => <Badge key={label} label={label} title={label} />),
|
item.labels.map((label) => <Badge key={label} label={label} title={label} />),
|
||||||
{ title: item.phase, className: kebabCase(item.phase) }
|
{ title: item.phase, className: kebabCase(item.phase) }
|
||||||
]}
|
]}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user