diff --git a/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts b/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts index 94c6e0cd9c..cd08ef4d5c 100644 --- a/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts +++ b/src/common/k8s-api/__tests__/kube-api-version-detection.test.ts @@ -6,13 +6,11 @@ import type { ApiManager } from "../api-manager"; import type { IngressApi } from "../endpoints"; import { Ingress } from "../endpoints"; import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting"; -import apiManagerInjectable from "../api-manager/manager.injectable"; import type { Fetch } from "../../fetch/fetch.injectable"; import fetchInjectable from "../../fetch/fetch.injectable"; import type { AsyncFnMock } from "@async-fn/jest"; import asyncFn from "@async-fn/jest"; import { flushPromises } from "../../test-utils/flush-promises"; -import createKubeJsonApiInjectable from "../create-kube-json-api.injectable"; import setupAutoRegistrationInjectable from "../../../renderer/before-frame-starts/runnables/setup-auto-registration.injectable"; import { createMockResponseFromString } from "../../../test-utils/mock-responses"; import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable"; @@ -20,14 +18,14 @@ import directoryForUserDataInjectable from "../../app-paths/directory-for-user-d import createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable"; import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-cluster.injectable"; import directoryForKubeConfigsInjectable from "../../app-paths/directory-for-kube-configs/directory-for-kube-configs.injectable"; -import apiKubeInjectable from "../../../renderer/k8s/api-kube.injectable"; +import apiManagerInjectable from "../api-manager/manager.injectable"; import type { DiContainer } from "@ogre-tools/injectable"; import ingressApiInjectable from "../endpoints/ingress.api.injectable"; describe("KubeApi", () => { - let di: DiContainer; - let registerApiSpy: jest.SpiedFunction; let fetchMock: AsyncFnMock; + let apiManager: ApiManager; + let di: DiContainer; beforeEach(async () => { di = getDiForUnitTesting({ doGeneralOverrides: true }); @@ -40,7 +38,6 @@ describe("KubeApi", () => { di.override(storesAndApisCanBeCreatedInjectable, () => true); const createCluster = di.inject(createClusterInjectable); - const createKubeJsonApi = di.inject(createKubeJsonApiInjectable); di.override(hostedClusterInjectable, () => createCluster({ contextName: "some-context-name", @@ -50,12 +47,7 @@ describe("KubeApi", () => { clusterServerUrl: "https://localhost:8080", })); - di.override(apiKubeInjectable, () => createKubeJsonApi({ - serverAddress: `http://127.0.0.1:9999`, - apiBase: "/api-kube", - })); - - registerApiSpy = jest.spyOn(di.inject(apiManagerInjectable), "registerApi"); + apiManager = di.inject(apiManagerInjectable); const setupAutoRegistration = di.inject(setupAutoRegistrationInjectable); @@ -79,7 +71,7 @@ describe("KubeApi", () => { it("requests version list from the api group from the initial apiBase", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io", { headers: { "content-type": "application/json", @@ -92,8 +84,8 @@ describe("KubeApi", () => { describe("when the version list from the api group resolves", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io", JSON.stringify({ apiVersion: "v1", kind: "APIGroup", name: "networking.k8s.io", @@ -117,7 +109,7 @@ describe("KubeApi", () => { it("requests resources from the versioned api group from the initial apiBase", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1", { headers: { "content-type": "application/json", @@ -130,8 +122,8 @@ describe("KubeApi", () => { describe("when resource request fufills with a resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1", JSON.stringify({ resources: [{ name: "ingresses", }], @@ -141,7 +133,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", { headers: { "content-type": "application/json", @@ -159,8 +151,8 @@ describe("KubeApi", () => { })); }); - it("registers the api with the changes info", () => { - expect(registerApiSpy).toBeCalledWith(ingressApi); + it("api is retrievable with the new apiBase", () => { + expect(apiManager.getApi("/apis/networking.k8s.io/v1/ingresses")).toBeDefined(); }); describe("when the request resolves with no data", () => { @@ -168,8 +160,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({})), ); result = await getCall; }); @@ -193,7 +185,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", { headers: { "content-type": "application/json", @@ -208,8 +200,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})), ); result = await getCall; }); @@ -226,8 +218,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({ apiVersion: "v1", kind: "Ingress", metadata: { @@ -260,7 +252,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", { headers: { "content-type": "application/json", @@ -275,8 +267,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})), ); result = await getCall; }); @@ -292,8 +284,8 @@ describe("KubeApi", () => { describe("when resource request fufills with no resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1", JSON.stringify({ resources: [], })), ); @@ -301,7 +293,7 @@ describe("KubeApi", () => { it("requests resources from the second versioned api group from the initial apiBase", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1", { headers: { "content-type": "application/json", @@ -316,8 +308,8 @@ describe("KubeApi", () => { describe("when resource request fufills with a resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1", JSON.stringify({ resources: [{ name: "ingresses", }], @@ -327,7 +319,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", { headers: { "content-type": "application/json", @@ -345,8 +337,12 @@ describe("KubeApi", () => { })); }); - it("registers the api with the changes info", () => { - expect(registerApiSpy).toBeCalledWith(ingressApi); + it("api is retrievable with the new apiBase", () => { + expect(apiManager.getApi("/apis/networking.k8s.io/v1beta1/ingresses")).toBeDefined(); + }); + + it("api is retrievable with the old apiBase", () => { + expect(apiManager.getApi("/apis/networking.k8s.io/v1/ingresses")).toBeDefined(); }); describe("when the request resolves with no data", () => { @@ -354,8 +350,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})), ); result = await getCall; }); @@ -379,7 +375,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", { headers: { "content-type": "application/json", @@ -394,8 +390,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), ); result = await getCall; }); @@ -412,8 +408,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({ apiVersion: "v1", kind: "Ingress", metadata: { @@ -446,7 +442,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", + "https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", { headers: { "content-type": "application/json", @@ -461,8 +457,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), ); result = await getCall; }); @@ -480,8 +476,8 @@ describe("KubeApi", () => { describe("when the version list from the api group resolves with no versions", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io", JSON.stringify({ "metadata": {}, "status": "Failure", "message": "the server could not find the requested resource", @@ -501,7 +497,7 @@ describe("KubeApi", () => { it("requests the resources from the base api url from the fallback api", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/extensions", + "https://127.0.0.1:12345/api-kube/apis/extensions", { headers: { "content-type": "application/json", @@ -514,8 +510,8 @@ describe("KubeApi", () => { describe("when resource request fufills with a resource", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/extensions"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/extensions"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions", JSON.stringify({ apiVersion: "v1", kind: "APIGroup", name: "extensions", @@ -535,7 +531,7 @@ describe("KubeApi", () => { it("requests resource versions from the versioned api group from the fallback apiBase", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1", + "https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1", { headers: { "content-type": "application/json", @@ -548,8 +544,8 @@ describe("KubeApi", () => { describe("when the preferred version request resolves to v1beta1", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions", JSON.stringify({ resources: [{ name: "ingresses", }], @@ -559,7 +555,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", + "https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", { headers: { "content-type": "application/json", @@ -577,8 +573,8 @@ describe("KubeApi", () => { })); }); - it("registers the api with the changes info", () => { - expect(registerApiSpy).toBeCalledWith(ingressApi); + it("api is retrievable with the new apiBase", () => { + expect(apiManager.getApi("/apis/extensions/v1beta1/ingresses")).toBeDefined(); }); describe("when the request resolves with no data", () => { @@ -586,8 +582,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})), ); result = await getCall; }); @@ -611,7 +607,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", + "https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", { headers: { "content-type": "application/json", @@ -626,8 +622,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), ); result = await getCall; }); @@ -644,8 +640,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({ + ["https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({ apiVersion: "v1beta1", kind: "Ingress", metadata: { @@ -678,7 +674,7 @@ describe("KubeApi", () => { it("makes the request to get the resource", () => { expect(fetchMock.mock.lastCall).toMatchObject([ - "http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", + "https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", { headers: { "content-type": "application/json", @@ -693,8 +689,8 @@ describe("KubeApi", () => { beforeEach(async () => { await fetchMock.resolveSpecific( - ["http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1"], - createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), + ["https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1"], + createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})), ); result = await getCall; }); diff --git a/src/common/k8s-api/api-manager/api-manager.ts b/src/common/k8s-api/api-manager/api-manager.ts index 080ccb671a..81b59ef9c2 100644 --- a/src/common/k8s-api/api-manager/api-manager.ts +++ b/src/common/k8s-api/api-manager/api-manager.ts @@ -5,11 +5,12 @@ import type { KubeObjectStore } from "../kube-object.store"; -import { action, observable, makeObservable } from "mobx"; -import { autoBind, isDefined, iter } from "../../utils"; +import type { IComputedValue } from "mobx"; +import { autorun, action, observable } from "mobx"; import type { KubeApi } from "../kube-api"; -import type { KubeJsonApiDataFor, KubeObject, ObjectReference } from "../kube-object"; +import type { KubeObject, ObjectReference } from "../kube-object"; import { parseKubeApi, createKubeApiURL } from "../kube-api-parse"; +import { chain, find } from "../../utils/iter"; export type RegisterableStore = Store extends KubeObjectStore ? Store @@ -21,25 +22,53 @@ export type KubeObjectStoreFrom = Api extends KubeApi : never; -export class ApiManager { - private readonly apis = observable.map(); - private readonly stores = observable.map(); +export type FindApiCallback = (api: KubeApi) => boolean; - constructor() { - makeObservable(this); - autoBind(this); +interface Dependencies { + readonly apis: IComputedValue; + readonly stores: IComputedValue; +} + +export class ApiManager { + private readonly externalApis = observable.array(); + private readonly externalStores = observable.array(); + + private readonly apis = observable.map(); + + constructor(private readonly dependencies: Dependencies) { + // NOTE: this is done to preserve the old behaviour of an API being discoverable using all previous apiBases + autorun(() => { + const apis = chain(this.dependencies.apis.get().values()) + .concat(this.externalApis.values()); + const removedApis = new Set(this.apis.values()); + + for (const api of apis) { + removedApis.delete(api); + this.apis.set(api.apiBase, api); + } + + for (const api of removedApis) { + for (const [apiBase, storedApi] of this.apis) { + if (storedApi === api) { + this.apis.delete(apiBase); + } + } + } + }); } - getApi(pathOrCallback: string | ((api: KubeApi) => boolean)) { - if (typeof pathOrCallback === "string") { - return this.apis.get(pathOrCallback) || this.apis.get(parseKubeApi(pathOrCallback).apiBase); + getApi(pathOrCallback: string | FindApiCallback) { + if (typeof pathOrCallback === "function") { + return find(this.apis.values(), pathOrCallback); } - return iter.find(this.apis.values(), pathOrCallback ?? (() => true)); + const { apiBase } = parseKubeApi(pathOrCallback); + + return this.apis.get(apiBase); } getApiByKind(kind: string, apiVersion: string) { - return iter.find(this.apis.values(), api => api.kind === kind && api.apiVersionWithGroup === apiVersion); + return this.getApi(api => api.kind === kind && api.apiVersionWithGroup === apiVersion); } registerApi(api: RegisterableApi): void; @@ -47,45 +76,23 @@ export class ApiManager { * @deprecated Just register the `api` by itself */ registerApi(apiBase: string, api: RegisterableApi): void; - registerApi(apiBaseRaw: string | RegisterableApi, apiRaw?: RegisterableApi) { - const api = typeof apiBaseRaw === "string" - ? apiRaw - : apiBaseRaw; - - if (!api?.apiBase) { - return; - } - - if (!this.apis.has(api.apiBase)) { - this.stores.forEach((store) => { - if (store.api === api) { - this.stores.set(api.apiBase, store); - } - }); - - this.apis.set(api.apiBase, api); + registerApi(...args: [RegisterableApi] | [string, RegisterableApi]) { + if (args.length === 1) { + this.externalApis.push(args[0]); + } else { + this.externalApis.push(args[1]); } } - protected resolveApi(api: undefined | string | KubeApi): KubeApi | undefined { - if (!api) { - return undefined; - } + unregisterApi(apiOrBase: string | KubeApi) { + if (typeof apiOrBase === "string") { + const api = this.externalApis.find(api => api.apiBase === apiOrBase); - if (typeof api === "string") { - return this.getApi(api); - } - - return api; - } - - unregisterApi(api: string | KubeApi) { - if (typeof api === "string") this.apis.delete(api); - else { - const apis = Array.from(this.apis.entries()); - const entry = apis.find(entry => entry[1] === api); - - if (entry) this.unregisterApi(entry[0]); + if (api) { + this.externalApis.remove(api); + } + } else { + this.unregisterApi(apiOrBase.apiBase); } } @@ -93,15 +100,11 @@ export class ApiManager { /** * @deprecated KubeObjectStore's should only every be about a single KubeApi type */ - registerStore(store: KubeObjectStore, KubeJsonApiDataFor>, apis: KubeApi[]): void; + registerStore(store: RegisterableStore, apis: KubeApi[]): void; @action - registerStore(store: KubeObjectStore, KubeJsonApiDataFor>, apis: KubeApi[] = [store.api]): void { - for (const api of apis.filter(isDefined)) { - if (api.apiBase) { - this.stores.set(api.apiBase, store as never); - } - } + registerStore(store: RegisterableStore): void { + this.externalStores.push(store); } getStore(api: string | undefined): KubeObjectStore | undefined; @@ -110,14 +113,23 @@ export class ApiManager { * @deprecated use an actual cast instead of hiding it with this unused type param */ getStore(api: string | KubeApi): Store | undefined ; - getStore(api: string | KubeApi | undefined): KubeObjectStore | undefined { - const { apiBase } = this.resolveApi(api) ?? {}; - - if (apiBase) { - return this.stores.get(apiBase); + getStore(apiOrBase: string | KubeApi | undefined): KubeObjectStore | undefined { + if (!apiOrBase) { + return undefined; } - return undefined; + const { apiBase } = typeof apiOrBase === "string" + ? parseKubeApi(apiOrBase) + : apiOrBase; + const api = this.getApi(apiBase); + + if (!api) { + return undefined; + } + + return chain(this.dependencies.stores.get().values()) + .concat(this.externalStores.values()) + .find(store => store.api.apiBase === api.apiBase); } lookupApiLink(ref: ObjectReference, parentObject?: KubeObject): string { @@ -132,7 +144,7 @@ export class ApiManager { const api = this.getApi(api => api.kind === kind && api.apiVersionWithGroup == apiVersion); if (api) { - return api.getUrl({ namespace, name }); + return api.formatUrlForNotListing({ namespace, name }); } // lookup api by generated resource link @@ -151,7 +163,7 @@ export class ApiManager { const apiByKind = this.getApi(api => api.kind === kind); if (apiByKind) { - return apiByKind.getUrl({ name, namespace }); + return apiByKind.formatUrlForNotListing({ name, namespace }); } // otherwise generate link with default prefix diff --git a/src/common/k8s-api/api-manager/kube-object-store-token.ts b/src/common/k8s-api/api-manager/kube-object-store-token.ts new file mode 100644 index 0000000000..bbf272db24 --- /dev/null +++ b/src/common/k8s-api/api-manager/kube-object-store-token.ts @@ -0,0 +1,10 @@ +/** + * Copyright (c) OpenLens Authors. All rights reserved. + * Licensed under MIT License. See LICENSE in root directory for more information. + */ +import { getInjectionToken } from "@ogre-tools/injectable"; +import type { KubeObjectStore } from "../kube-object.store"; + +export const kubeObjectStoreInjectionToken = getInjectionToken>({ + id: "kube-object-store-token", +}); diff --git a/src/common/k8s-api/api-manager/manager.injectable.ts b/src/common/k8s-api/api-manager/manager.injectable.ts index 45188cec7a..f0b61c28b6 100644 --- a/src/common/k8s-api/api-manager/manager.injectable.ts +++ b/src/common/k8s-api/api-manager/manager.injectable.ts @@ -2,29 +2,28 @@ * Copyright (c) OpenLens Authors. All rights reserved. * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { getInjectable, getInjectionToken } from "@ogre-tools/injectable"; +import { getInjectable } from "@ogre-tools/injectable"; import { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token"; -import type { KubeObjectStore } from "../kube-object.store"; import { ApiManager } from "./api-manager"; - -export const kubeObjectStoreInjectionToken = getInjectionToken>({ - id: "kube-object-store-token", -}); +import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx"; +import { kubeObjectStoreInjectionToken } from "./kube-object-store-token"; +import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token"; +import { computed } from "mobx"; const apiManagerInjectable = getInjectable({ id: "api-manager", instantiate: (di) => { - const apiManager = new ApiManager(); + const computedInjectMany = di.inject(computedInjectManyInjectable); + const storesAndApisCanBeCreated = di.inject(storesAndApisCanBeCreatedInjectionToken); - if (di.inject(storesAndApisCanBeCreatedInjectionToken)) { - const stores = di.injectMany(kubeObjectStoreInjectionToken); - - for (const store of stores) { - apiManager.registerStore(store); - } - } - - return apiManager; + return new ApiManager({ + apis: storesAndApisCanBeCreated + ? computedInjectMany(kubeApiInjectionToken) + : computed(() => []), + stores: storesAndApisCanBeCreated + ? computedInjectMany(kubeObjectStoreInjectionToken) + : computed(() => []), + }); }, }); diff --git a/src/common/k8s-api/kube-api.ts b/src/common/k8s-api/kube-api.ts index c2a8906400..8e6e86d7da 100644 --- a/src/common/k8s-api/kube-api.ts +++ b/src/common/k8s-api/kube-api.ts @@ -20,10 +20,9 @@ import type { Patch } from "rfc6902"; import assert from "assert"; import type { PartialDeep } from "type-fest"; import type { Logger } from "../logger"; -import { Environments, getEnvironmentSpecificLegacyGlobalDiForExtensionApi } from "../../extensions/as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; -import autoRegistrationEmitterInjectable from "./api-manager/auto-registration-emitter.injectable"; import type AbortController from "abort-controller"; import { matches } from "lodash/fp"; +import { makeObservable, observable } from "mobx"; /** * The options used for creating a `KubeApi` @@ -206,30 +205,6 @@ export interface DeleteResourceDescriptor extends ResourceDescriptor { propagationPolicy?: PropagationPolicy; } -/** - * @deprecated In the new extension API, don't expose `KubeApi`'s constructor - */ -function legacyRegisterApi(api: KubeApi): void { - try { - /** - * This function throws if called in `main`, so the `try..catch` is to make sure that doesn't - * leak. - * - * However, we need this code to be run in `renderer` so that the auto registering of `KubeApi` - * instances still works. That auto registering never worked or was applicable in `main` because - * there is no "single cluster" on `main`. - * - * TODO: rearchitect this design pattern in the new extension API - */ - const di = getEnvironmentSpecificLegacyGlobalDiForExtensionApi(Environments.renderer); - const autoRegistrationEmitter = di.inject(autoRegistrationEmitterInjectable); - - setImmediate(() => autoRegistrationEmitter.emit("kubeApi", api)); - } catch { - // ignore error - } -} - export interface KubeApiDependencies { readonly logger: Logger; readonly maybeKubeApi: KubeJsonApi | undefined; @@ -241,7 +216,9 @@ export class KubeApi< > { readonly kind: string; readonly apiVersion: string; - apiBase: string; + + @observable apiBase: string; + apiPrefix: string; apiGroup: string; apiVersionPreferred: string | undefined; @@ -288,7 +265,7 @@ export class KubeApi< this.apiResource = resource; this.request = request; this.objectConstructor = objectConstructor; - legacyRegisterApi(this); + makeObservable(this); } get apiVersionWithGroup() { @@ -347,7 +324,6 @@ export class KubeApi< this.apiGroup = apiGroup; this.apiVersionPreferred = apiVersionPreferred; this.apiBase = this.computeApiBase(); - legacyRegisterApi(this); } } diff --git a/src/common/utils/__tests__/iter.test.ts b/src/common/utils/__tests__/iter.test.ts index e41894e662..2489649d90 100644 --- a/src/common/utils/__tests__/iter.test.ts +++ b/src/common/utils/__tests__/iter.test.ts @@ -3,7 +3,7 @@ * Licensed under MIT License. See LICENSE in root directory for more information. */ -import { join, nth, reduce } from "../iter"; +import { join, nth, reduce, concat } from "../iter"; describe("iter", () => { describe("reduce", () => { @@ -39,4 +39,30 @@ describe("iter", () => { expect(nth(["a", "b"], 0)).toBe("a"); }); }); + + describe("concat", () => { + it("should yield undefined for empty args", () => { + const iter = concat(); + + expect(iter.next()).toEqual({ done: true }); + }); + + it("should yield undefined for only empty args", () => { + const iter = concat([].values(), [].values(), [].values(), [].values()); + + expect(iter.next()).toEqual({ done: true }); + }); + + it("should yield all of the first and then all of the second", () => { + const iter = concat([1, 2, 3].values(), [4, 5, 6].values()); + + expect(iter.next()).toEqual({ done: false, value: 1 }); + expect(iter.next()).toEqual({ done: false, value: 2 }); + expect(iter.next()).toEqual({ done: false, value: 3 }); + expect(iter.next()).toEqual({ done: false, value: 4 }); + expect(iter.next()).toEqual({ done: false, value: 5 }); + expect(iter.next()).toEqual({ done: false, value: 6 }); + expect(iter.next()).toEqual({ done: true }); + }); + }); }); diff --git a/src/common/utils/iter.ts b/src/common/utils/iter.ts index 5b5593d2d4..dc1c4621fd 100644 --- a/src/common/utils/iter.ts +++ b/src/common/utils/iter.ts @@ -12,6 +12,7 @@ interface Iterator extends Iterable { collect(fn: (values: Iterable) => U): U; map(fn: (val: T) => U): Iterator; flatMap(fn: (val: T) => U[]): Iterator; + concat(src2: IterableIterator): Iterator; join(sep?: string): string; } @@ -24,6 +25,7 @@ export function chain(src: IterableIterator): Iterator { find: (fn) => find(src, fn), join: (sep) => join(src, sep), collect: (fn) => fn(src), + concat: (src2) => chain(concat(src, src2)), [Symbol.iterator]: () => src, }; } @@ -236,3 +238,11 @@ export function every(src: Iterable, fn: (val: T) => any): boolean { return true; } + +export function* concat(...sources: IterableIterator[]): IterableIterator { + for (const source of sources) { + for (const val of source) { + yield val; + } + } +} diff --git a/src/extensions/common-api/k8s-api.ts b/src/extensions/common-api/k8s-api.ts index 3856429717..c24f7d14e3 100644 --- a/src/extensions/common-api/k8s-api.ts +++ b/src/extensions/common-api/k8s-api.ts @@ -26,10 +26,12 @@ import loggerInjectable from "../../common/logger.injectable"; import { getLegacyGlobalDiForExtensionApi } from "../as-legacy-globals-for-extension-api/legacy-global-di-for-extension-api"; import maybeKubeApiInjectable from "../../common/k8s-api/maybe-kube-api.injectable"; import { DeploymentApi as InternalDeploymentApi, IngressApi as InternalIngressApi, NodeApi, PersistentVolumeClaimApi, PodApi } from "../../common/k8s-api/endpoints"; +import { storesAndApisCanBeCreatedInjectionToken } from "../../common/k8s-api/stores-apis-can-be-created.token"; export const apiManager = asLegacyGlobalForExtensionApi(apiManagerInjectable); export const forCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForClusterInjectable); export const forRemoteCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForRemoteClusterInjectable); +export const createResourceStack = asLegacyGlobalFunctionForExtensionApi(createResourceStackInjectable); const getKubeApiDeps = (): KubeApiDependencies => { const di = getLegacyGlobalDiForExtensionApi(); @@ -45,7 +47,16 @@ function KubeApiCstr< Object extends KubeObject = KubeObject, Data extends KubeJsonApiDataFor = KubeJsonApiDataFor, >(opts: KubeApiOptions) { - return new InternalKubeApi(getKubeApiDeps(), opts); + const api = new InternalKubeApi(getKubeApiDeps(), opts); + + const di = getLegacyGlobalDiForExtensionApi(); + const storesAndApisCanBeCreated = di.inject(storesAndApisCanBeCreatedInjectionToken); + + if (storesAndApisCanBeCreated) { + apiManager.registerApi(api); + } + + return api; } export const KubeApi = KubeApiCstr as unknown as new< @@ -53,8 +64,6 @@ export const KubeApi = KubeApiCstr as unknown as new< Data extends KubeJsonApiDataFor = KubeJsonApiDataFor, >(opts: KubeApiOptions) => InternalKubeApi; -export const createResourceStack = asLegacyGlobalFunctionForExtensionApi(createResourceStackInjectable); - /** * @deprecated Switch to using `Common.createResourceStack` instead */ @@ -174,31 +183,31 @@ export interface IgnoredKubeApiOptions { // NOTE: these *Constructor functions MUST be `function` to work with `new X()` function PodsApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) { - return new PodApi(getKubeApiDeps(), opts ?? {}); + return new PodApi(getKubeApiDeps(), opts); } export const PodsApi = PodsApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => PodApi; function NodesApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) { - return new NodeApi(getKubeApiDeps(), opts ?? {}); + return new NodeApi(getKubeApiDeps(), opts); } export const NodesApi = NodesApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => NodeApi; function DeploymentApiConstructor(opts?: DerivedKubeApiOptions) { - return new InternalDeploymentApi(getKubeApiDeps(), opts ?? {}); + return new InternalDeploymentApi(getKubeApiDeps(), opts); } export const DeploymentApi = DeploymentApiConstructor as unknown as new (opts?: DerivedKubeApiOptions) => InternalDeploymentApi; function IngressApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) { - return new InternalIngressApi(getKubeApiDeps(), opts ?? {}); + return new InternalIngressApi(getKubeApiDeps(), opts); } export const IngressApi = IngressApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => InternalIngressApi; function PersistentVolumeClaimsApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) { - return new PersistentVolumeClaimApi(getKubeApiDeps(), opts ?? {}); + return new PersistentVolumeClaimApi(getKubeApiDeps(), opts); } export const PersistentVolumeClaimsApi = PersistentVolumeClaimsApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => PersistentVolumeClaimApi; diff --git a/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx b/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx index 1a22d5d0b0..847ad3ed11 100644 --- a/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx +++ b/src/features/cluster/kube-object-details/extension-api/reactively-hide-kube-object-detail-item.test.tsx @@ -13,6 +13,7 @@ import apiManagerInjectable from "../../../../common/k8s-api/api-manager/manager import type { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store"; import type { KubeApi } from "../../../../common/k8s-api/kube-api"; import showDetailsInjectable from "../../../../renderer/components/kube-detail-params/show-details.injectable"; +import assert from "assert"; describe("reactively hide kube object detail item", () => { let builder: ApplicationBuilder; @@ -89,6 +90,10 @@ describe("reactively hide kube object detail item", () => { runInAction(() => { someObservable.set(true); }); + + const apiManager = builder.applicationWindow.only.di.inject(apiManagerInjectable); + + assert(apiManager.getStore("/apis/some-api-version/some-kind")); }); it("renders", () => { diff --git a/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts b/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts index 2d6ece0dfd..1b64040d40 100644 --- a/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts +++ b/src/renderer/components/+cluster/cluster-overview-store/cluster-overview-store.injectable.ts @@ -7,7 +7,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import type { ClusterOverviewStorageState } from "./cluster-overview-store"; import { ClusterOverviewStore, MetricNodeRole, MetricType } from "./cluster-overview-store"; import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/kube-object-store-token"; import clusterApiInjectable from "../../../../common/k8s-api/endpoints/cluster.api.injectable"; import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable"; import assert from "assert"; diff --git a/src/renderer/components/+config-autoscalers/store.injectable.ts b/src/renderer/components/+config-autoscalers/store.injectable.ts index 47a0f25680..6b09568537 100644 --- a/src/renderer/components/+config-autoscalers/store.injectable.ts +++ b/src/renderer/components/+config-autoscalers/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import horizontalPodAutoscalerApiInjectable from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+config-leases/store.injectable.ts b/src/renderer/components/+config-leases/store.injectable.ts index df91a1df54..26cf598aff 100644 --- a/src/renderer/components/+config-leases/store.injectable.ts +++ b/src/renderer/components/+config-leases/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import leaseApiInjectable from "../../../common/k8s-api/endpoints/lease.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+config-limit-ranges/store.injectable.ts b/src/renderer/components/+config-limit-ranges/store.injectable.ts index f22aadaec1..5109b25079 100644 --- a/src/renderer/components/+config-limit-ranges/store.injectable.ts +++ b/src/renderer/components/+config-limit-ranges/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import limitRangeApiInjectable from "../../../common/k8s-api/endpoints/limit-range.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+config-maps/store.injectable.ts b/src/renderer/components/+config-maps/store.injectable.ts index 44945120f0..e282e4d121 100644 --- a/src/renderer/components/+config-maps/store.injectable.ts +++ b/src/renderer/components/+config-maps/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import configMapApiInjectable from "../../../common/k8s-api/endpoints/config-map.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+config-pod-disruption-budgets/store.injectable.ts b/src/renderer/components/+config-pod-disruption-budgets/store.injectable.ts index f6bb813455..3f3b83e21f 100644 --- a/src/renderer/components/+config-pod-disruption-budgets/store.injectable.ts +++ b/src/renderer/components/+config-pod-disruption-budgets/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import podDisruptionBudgetApiInjectable from "../../../common/k8s-api/endpoints/pod-disruption-budget.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+config-priority-classes/store.injectable.ts b/src/renderer/components/+config-priority-classes/store.injectable.ts index acd97aee5b..e3e22a53b9 100644 --- a/src/renderer/components/+config-priority-classes/store.injectable.ts +++ b/src/renderer/components/+config-priority-classes/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import priorityClassApiInjectable from "../../../common/k8s-api/endpoints/priority-class.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+config-resource-quotas/store.injectable.ts b/src/renderer/components/+config-resource-quotas/store.injectable.ts index 77708a1bf4..cbbb014d05 100644 --- a/src/renderer/components/+config-resource-quotas/store.injectable.ts +++ b/src/renderer/components/+config-resource-quotas/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import resourceQuotaApiInjectable from "../../../common/k8s-api/endpoints/resource-quota.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+config-runtime-classes/store.injectable.ts b/src/renderer/components/+config-runtime-classes/store.injectable.ts index 03d4e50a1a..70c0efa6c4 100644 --- a/src/renderer/components/+config-runtime-classes/store.injectable.ts +++ b/src/renderer/components/+config-runtime-classes/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import runtimeClassApiInjectable from "../../../common/k8s-api/endpoints/runtime-class.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+config-secrets/store.injectable.ts b/src/renderer/components/+config-secrets/store.injectable.ts index d98f3677c1..a18fff90b2 100644 --- a/src/renderer/components/+config-secrets/store.injectable.ts +++ b/src/renderer/components/+config-secrets/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import secretApiInjectable from "../../../common/k8s-api/endpoints/secret.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+custom-resources/definition.store.injectable.ts b/src/renderer/components/+custom-resources/definition.store.injectable.ts index 47c7652f8b..f1d8f635b8 100644 --- a/src/renderer/components/+custom-resources/definition.store.injectable.ts +++ b/src/renderer/components/+custom-resources/definition.store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import autoRegistrationEmitterInjectable from "../../../common/k8s-api/api-manager/auto-registration-emitter.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import customResourceDefinitionApiInjectable from "../../../common/k8s-api/endpoints/custom-resource-definition.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+events/store.injectable.ts b/src/renderer/components/+events/store.injectable.ts index 57bc98e6d2..b81a198413 100644 --- a/src/renderer/components/+events/store.injectable.ts +++ b/src/renderer/components/+events/store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import getPodByIdInjectable from "../+workloads-pods/get-pod-by-id.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import kubeEventApiInjectable from "../../../common/k8s-api/endpoints/events.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+namespaces/store.injectable.ts b/src/renderer/components/+namespaces/store.injectable.ts index 50164e6626..1ee9dc024f 100644 --- a/src/renderer/components/+namespaces/store.injectable.ts +++ b/src/renderer/components/+namespaces/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import { NamespaceStore } from "./store"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import createStorageInjectable from "../../utils/create-storage/create-storage.injectable"; import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable"; import assert from "assert"; diff --git a/src/renderer/components/+network-endpoints/store.injectable.ts b/src/renderer/components/+network-endpoints/store.injectable.ts index d376b039a0..ee8474c8a8 100644 --- a/src/renderer/components/+network-endpoints/store.injectable.ts +++ b/src/renderer/components/+network-endpoints/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import endpointsApiInjectable from "../../../common/k8s-api/endpoints/endpoint.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts b/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts index 9379b4ff59..98315f91ac 100644 --- a/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts +++ b/src/renderer/components/+network-ingresses/ingress-class-store.injectable.ts @@ -4,10 +4,9 @@ */ import assert from "assert"; import { getInjectable } from "@ogre-tools/injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import ingressClassApiInjectable from "../../../common/k8s-api/endpoints/ingress-class.api.injectable"; import { IngressClassStore } from "./ingress-class-store"; - import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/src/renderer/components/+network-ingresses/ingress-store.injectable.ts b/src/renderer/components/+network-ingresses/ingress-store.injectable.ts index 8f5f1e6e39..ebd460664e 100644 --- a/src/renderer/components/+network-ingresses/ingress-store.injectable.ts +++ b/src/renderer/components/+network-ingresses/ingress-store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import ingressApiInjectable from "../../../common/k8s-api/endpoints/ingress.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+network-policies/store.injectable.ts b/src/renderer/components/+network-policies/store.injectable.ts index b17c0918d9..b3d7cfa0bf 100644 --- a/src/renderer/components/+network-policies/store.injectable.ts +++ b/src/renderer/components/+network-policies/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import networkPolicyApiInjectable from "../../../common/k8s-api/endpoints/network-policy.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+network-services/store.injectable.ts b/src/renderer/components/+network-services/store.injectable.ts index d705ca0d46..a4a2f831eb 100644 --- a/src/renderer/components/+network-services/store.injectable.ts +++ b/src/renderer/components/+network-services/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import serviceApiInjectable from "../../../common/k8s-api/endpoints/service.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+nodes/store.injectable.ts b/src/renderer/components/+nodes/store.injectable.ts index a397db07e1..b12845b6a4 100644 --- a/src/renderer/components/+nodes/store.injectable.ts +++ b/src/renderer/components/+nodes/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import nodeApiInjectable from "../../../common/k8s-api/endpoints/node.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+pod-security-policies/store.injectable.ts b/src/renderer/components/+pod-security-policies/store.injectable.ts index 2e27ad466a..0c90fa571e 100644 --- a/src/renderer/components/+pod-security-policies/store.injectable.ts +++ b/src/renderer/components/+pod-security-policies/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import podSecurityPolicyApiInjectable from "../../../common/k8s-api/endpoints/pod-security-policy.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+storage-classes/store.injectable.ts b/src/renderer/components/+storage-classes/store.injectable.ts index 0ae16b0a92..b0508f01fd 100644 --- a/src/renderer/components/+storage-classes/store.injectable.ts +++ b/src/renderer/components/+storage-classes/store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import getPersistentVolumesByStorageClassInjectable from "../+storage-volumes/get-persisten-volumes-by-storage-class.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import storageClassApiInjectable from "../../../common/k8s-api/endpoints/storage-class.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+storage-volume-claims/store.injectable.ts b/src/renderer/components/+storage-volume-claims/store.injectable.ts index ef9b4629fa..a9289a1fd0 100644 --- a/src/renderer/components/+storage-volume-claims/store.injectable.ts +++ b/src/renderer/components/+storage-volume-claims/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import persistentVolumeClaimApiInjectable from "../../../common/k8s-api/endpoints/persistent-volume-claim.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+storage-volumes/store.injectable.ts b/src/renderer/components/+storage-volumes/store.injectable.ts index 1432c0ed6c..00a0db0c8c 100644 --- a/src/renderer/components/+storage-volumes/store.injectable.ts +++ b/src/renderer/components/+storage-volumes/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import persistentVolumeApiInjectable from "../../../common/k8s-api/endpoints/persistent-volume.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable"; diff --git a/src/renderer/components/+user-management/+cluster-role-bindings/store.injectable.ts b/src/renderer/components/+user-management/+cluster-role-bindings/store.injectable.ts index ac3eb8a07d..54250222d3 100644 --- a/src/renderer/components/+user-management/+cluster-role-bindings/store.injectable.ts +++ b/src/renderer/components/+user-management/+cluster-role-bindings/store.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../../../../common/k8s-api/stores-apis-can-be-created.token"; import clusterRoleBindingApiInjectable from "../../../../common/k8s-api/endpoints/cluster-role-binding.api.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/kube-object-store-token"; import { ClusterRoleBindingStore } from "./store"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../../cluster-frame-context/for-cluster-scoped-resources.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; diff --git a/src/renderer/components/+user-management/+cluster-roles/store.injectable.ts b/src/renderer/components/+user-management/+cluster-roles/store.injectable.ts index c88b457b1d..d7ea148d03 100644 --- a/src/renderer/components/+user-management/+cluster-roles/store.injectable.ts +++ b/src/renderer/components/+user-management/+cluster-roles/store.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import { storesAndApisCanBeCreatedInjectionToken } from "../../../../common/k8s-api/stores-apis-can-be-created.token"; import clusterRoleApiInjectable from "../../../../common/k8s-api/endpoints/cluster-role.api.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/kube-object-store-token"; import { ClusterRoleStore } from "./store"; import clusterFrameContextForClusterScopedResourcesInjectable from "../../../cluster-frame-context/for-cluster-scoped-resources.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; diff --git a/src/renderer/components/+user-management/+role-bindings/store.injectable.ts b/src/renderer/components/+user-management/+role-bindings/store.injectable.ts index 416223b071..e9b9154068 100644 --- a/src/renderer/components/+user-management/+role-bindings/store.injectable.ts +++ b/src/renderer/components/+user-management/+role-bindings/store.injectable.ts @@ -4,7 +4,7 @@ */ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; -import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/kube-object-store-token"; import roleBindingApiInjectable from "../../../../common/k8s-api/endpoints/role-binding.api.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+user-management/+roles/store.injectable.ts b/src/renderer/components/+user-management/+roles/store.injectable.ts index f0df652438..99eddcbfa0 100644 --- a/src/renderer/components/+user-management/+roles/store.injectable.ts +++ b/src/renderer/components/+user-management/+roles/store.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import roleApiInjectable from "../../../../common/k8s-api/endpoints/role.api.injectable"; import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/kube-object-store-token"; import { RoleStore } from "./store"; import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; diff --git a/src/renderer/components/+user-management/+service-accounts/store.injectable.ts b/src/renderer/components/+user-management/+service-accounts/store.injectable.ts index fd96db2d65..a4749f7ecb 100644 --- a/src/renderer/components/+user-management/+service-accounts/store.injectable.ts +++ b/src/renderer/components/+user-management/+service-accounts/store.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import serviceAccountApiInjectable from "../../../../common/k8s-api/endpoints/service-account.api.injectable"; import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../../common/k8s-api/api-manager/kube-object-store-token"; import { ServiceAccountStore } from "./store"; import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable"; import loggerInjectable from "../../../../common/logger.injectable"; diff --git a/src/renderer/components/+workloads-cronjobs/store.injectable.ts b/src/renderer/components/+workloads-cronjobs/store.injectable.ts index 2569e77440..98d539a9ce 100644 --- a/src/renderer/components/+workloads-cronjobs/store.injectable.ts +++ b/src/renderer/components/+workloads-cronjobs/store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import getJobsByOwnerInjectable from "../+workloads-jobs/get-jobs-by-owner.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import cronJobApiInjectable from "../../../common/k8s-api/endpoints/cron-job.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+workloads-daemonsets/store.injectable.ts b/src/renderer/components/+workloads-daemonsets/store.injectable.ts index 59252688bf..4b79b19bb5 100644 --- a/src/renderer/components/+workloads-daemonsets/store.injectable.ts +++ b/src/renderer/components/+workloads-daemonsets/store.injectable.ts @@ -7,7 +7,7 @@ import assert from "assert"; import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable"; import daemonSetApiInjectable from "../../../common/k8s-api/endpoints/daemon-set.api.injectable"; import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import { DaemonSetStore } from "./store"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/src/renderer/components/+workloads-deployments/store.injectable.ts b/src/renderer/components/+workloads-deployments/store.injectable.ts index 1a6a9f7df1..50ae255e21 100644 --- a/src/renderer/components/+workloads-deployments/store.injectable.ts +++ b/src/renderer/components/+workloads-deployments/store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import podStoreInjectable from "../+workloads-pods/store.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import { storesAndApisCanBeCreatedInjectionToken } from "../../../common/k8s-api/stores-apis-can-be-created.token"; import deploymentApiInjectable from "../../../common/k8s-api/endpoints/deployment.api.injectable"; import { DeploymentStore } from "./store"; diff --git a/src/renderer/components/+workloads-jobs/store.injectable.ts b/src/renderer/components/+workloads-jobs/store.injectable.ts index 28d3806788..083b465ded 100644 --- a/src/renderer/components/+workloads-jobs/store.injectable.ts +++ b/src/renderer/components/+workloads-jobs/store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import jobApiInjectable from "../../../common/k8s-api/endpoints/job.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+workloads-pods/store.injectable.ts b/src/renderer/components/+workloads-pods/store.injectable.ts index 473cd80c5c..7b2bc23419 100644 --- a/src/renderer/components/+workloads-pods/store.injectable.ts +++ b/src/renderer/components/+workloads-pods/store.injectable.ts @@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import podApiInjectable from "../../../common/k8s-api/endpoints/pod.api.injectable"; import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import { PodStore } from "./store"; import podMetricsApiInjectable from "../../../common/k8s-api/endpoints/pod-metrics.api.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; diff --git a/src/renderer/components/+workloads-replicasets/store.injectable.ts b/src/renderer/components/+workloads-replicasets/store.injectable.ts index b54fd0295d..34887a0590 100644 --- a/src/renderer/components/+workloads-replicasets/store.injectable.ts +++ b/src/renderer/components/+workloads-replicasets/store.injectable.ts @@ -7,7 +7,7 @@ import assert from "assert"; import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable"; import replicaSetApiInjectable from "../../../common/k8s-api/endpoints/replica-set.api.injectable"; import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import { ReplicaSetStore } from "./store"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable"; import loggerInjectable from "../../../common/logger.injectable"; diff --git a/src/renderer/components/+workloads-statefulsets/store.injectable.ts b/src/renderer/components/+workloads-statefulsets/store.injectable.ts index ce8649b109..b8fef46c51 100644 --- a/src/renderer/components/+workloads-statefulsets/store.injectable.ts +++ b/src/renderer/components/+workloads-statefulsets/store.injectable.ts @@ -5,7 +5,7 @@ import { getInjectable } from "@ogre-tools/injectable"; import assert from "assert"; import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable"; -import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/manager.injectable"; +import { kubeObjectStoreInjectionToken } from "../../../common/k8s-api/api-manager/kube-object-store-token"; import statefulSetApiInjectable from "../../../common/k8s-api/endpoints/stateful-set.api.injectable"; import loggerInjectable from "../../../common/logger.injectable"; import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";