diff --git a/src/renderer/api/kube-api.ts b/src/renderer/api/kube-api.ts index 56ae9558e8..8a3a2517c2 100644 --- a/src/renderer/api/kube-api.ts +++ b/src/renderer/api/kube-api.ts @@ -79,6 +79,18 @@ export function forCluster(cluster: IKubeApiCluster, kubeC }); } +export function ensureObjectSelfLink(api: KubeApi, object: KubeJsonApiData) { + if (!object.metadata.selfLink) { + object.metadata.selfLink = createKubeApiURL({ + apiPrefix: api.apiPrefix, + apiVersion: api.apiVersionWithGroup, + resource: api.apiResource, + namespace: api.isNamespaced ? object.metadata.namespace : undefined, + name: object.metadata.name, + }); + } +} + export class KubeApi { static parseApi = parseKubeApi; @@ -256,29 +268,13 @@ export class KubeApi { return query; } - protected generateSelfLink(kubeObject: T): string { - return createKubeApiURL({ - apiPrefix: this.apiPrefix, - apiVersion: this.apiVersionWithGroup, - resource: this.apiResource, - namespace: this.isNamespaced ? kubeObject.getNs() : undefined, - name: kubeObject.getName(), - }); - } - - protected ensureObjectSelfLink(kubeObject: T): void { - if (!kubeObject.metadata.selfLink) { - kubeObject.metadata.selfLink = this.generateSelfLink(kubeObject); - } - } - protected parseResponse(data: KubeJsonApiData | KubeJsonApiData[] | KubeJsonApiDataList, namespace?: string): any { const KubeObjectConstructor = this.objectConstructor; if (KubeObject.isJsonApiData(data)) { const object = new KubeObjectConstructor(data); - this.ensureObjectSelfLink(object); + ensureObjectSelfLink(this, object); return object; } @@ -297,7 +293,7 @@ export class KubeApi { ...item, }); - this.ensureObjectSelfLink(object); + ensureObjectSelfLink(this, object); return object; }); diff --git a/src/renderer/api/kube-watch-api.ts b/src/renderer/api/kube-watch-api.ts index 6ff4ff5b92..78ca25256e 100644 --- a/src/renderer/api/kube-watch-api.ts +++ b/src/renderer/api/kube-watch-api.ts @@ -5,7 +5,7 @@ import { stringify } from "querystring"; import { autobind, EventEmitter } from "../utils"; import { KubeJsonApiData } from "./kube-json-api"; import type { KubeObjectStore } from "../kube-object.store"; -import { KubeApi } from "./kube-api"; +import { ensureObjectSelfLink, KubeApi } from "./kube-api"; import { apiManager } from "./api-manager"; import { apiPrefix, isDevelopment } from "../../common/vars"; import { getHostedCluster } from "../../common/cluster-store"; @@ -164,6 +164,8 @@ export class KubeWatchApi { api.setResourceVersion(namespace, resourceVersion); api.setResourceVersion("", resourceVersion); + ensureObjectSelfLink(api, evt.object); + if (store == apiManager.getStore(api)) { callback(evt); }