mirror of
https://github.com/lensapp/lens.git
synced 2025-05-20 05:10:56 +00:00
Remove kludge from KubeApi (#6867)
* Add support for concating iterators Signed-off-by: Sebastian Malton <sebastian@malton.name> * Make clear the seperation of extenal and internal stores and apis Signed-off-by: Sebastian Malton <sebastian@malton.name> * Remove old kludge Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add kludge to extension api to maintain functionality Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix imports Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix KubeApi tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add failing test to maintain behaviour Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix tests for KubeApi Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix build Signed-off-by: Sebastian Malton <sebastian@malton.name> * Fix reactively-hide-kube-object-detail-item tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots Signed-off-by: Sebastian Malton <sebastian@malton.name> * Update snapshots Signed-off-by: Sebastian Malton <sebastian@malton.name> * Add some technical tests Signed-off-by: Sebastian Malton <sebastian@malton.name> * More clear apiBase initialization Signed-off-by: Sebastian Malton <sebastian@malton.name> Signed-off-by: Sebastian Malton <sebastian@malton.name>
This commit is contained in:
parent
0ec8cbd7ed
commit
bb7bdf2264
@ -6,13 +6,11 @@ import type { ApiManager } from "../api-manager";
|
|||||||
import type { IngressApi } from "../endpoints";
|
import type { IngressApi } from "../endpoints";
|
||||||
import { Ingress } from "../endpoints";
|
import { Ingress } from "../endpoints";
|
||||||
import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
|
import { getDiForUnitTesting } from "../../../renderer/getDiForUnitTesting";
|
||||||
import apiManagerInjectable from "../api-manager/manager.injectable";
|
|
||||||
import type { Fetch } from "../../fetch/fetch.injectable";
|
import type { Fetch } from "../../fetch/fetch.injectable";
|
||||||
import fetchInjectable from "../../fetch/fetch.injectable";
|
import fetchInjectable from "../../fetch/fetch.injectable";
|
||||||
import type { AsyncFnMock } from "@async-fn/jest";
|
import type { AsyncFnMock } from "@async-fn/jest";
|
||||||
import asyncFn from "@async-fn/jest";
|
import asyncFn from "@async-fn/jest";
|
||||||
import { flushPromises } from "../../test-utils/flush-promises";
|
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 setupAutoRegistrationInjectable from "../../../renderer/before-frame-starts/runnables/setup-auto-registration.injectable";
|
||||||
import { createMockResponseFromString } from "../../../test-utils/mock-responses";
|
import { createMockResponseFromString } from "../../../test-utils/mock-responses";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../../renderer/stores-apis-can-be-created.injectable";
|
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 createClusterInjectable from "../../../main/create-cluster/create-cluster.injectable";
|
||||||
import hostedClusterInjectable from "../../../renderer/cluster-frame-context/hosted-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 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 type { DiContainer } from "@ogre-tools/injectable";
|
||||||
import ingressApiInjectable from "../endpoints/ingress.api.injectable";
|
import ingressApiInjectable from "../endpoints/ingress.api.injectable";
|
||||||
|
|
||||||
describe("KubeApi", () => {
|
describe("KubeApi", () => {
|
||||||
let di: DiContainer;
|
|
||||||
let registerApiSpy: jest.SpiedFunction<ApiManager["registerApi"]>;
|
|
||||||
let fetchMock: AsyncFnMock<Fetch>;
|
let fetchMock: AsyncFnMock<Fetch>;
|
||||||
|
let apiManager: ApiManager;
|
||||||
|
let di: DiContainer;
|
||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
di = getDiForUnitTesting({ doGeneralOverrides: true });
|
||||||
@ -40,7 +38,6 @@ describe("KubeApi", () => {
|
|||||||
di.override(storesAndApisCanBeCreatedInjectable, () => true);
|
di.override(storesAndApisCanBeCreatedInjectable, () => true);
|
||||||
|
|
||||||
const createCluster = di.inject(createClusterInjectable);
|
const createCluster = di.inject(createClusterInjectable);
|
||||||
const createKubeJsonApi = di.inject(createKubeJsonApiInjectable);
|
|
||||||
|
|
||||||
di.override(hostedClusterInjectable, () => createCluster({
|
di.override(hostedClusterInjectable, () => createCluster({
|
||||||
contextName: "some-context-name",
|
contextName: "some-context-name",
|
||||||
@ -50,12 +47,7 @@ describe("KubeApi", () => {
|
|||||||
clusterServerUrl: "https://localhost:8080",
|
clusterServerUrl: "https://localhost:8080",
|
||||||
}));
|
}));
|
||||||
|
|
||||||
di.override(apiKubeInjectable, () => createKubeJsonApi({
|
apiManager = di.inject(apiManagerInjectable);
|
||||||
serverAddress: `http://127.0.0.1:9999`,
|
|
||||||
apiBase: "/api-kube",
|
|
||||||
}));
|
|
||||||
|
|
||||||
registerApiSpy = jest.spyOn(di.inject(apiManagerInjectable), "registerApi");
|
|
||||||
|
|
||||||
const setupAutoRegistration = di.inject(setupAutoRegistrationInjectable);
|
const setupAutoRegistration = di.inject(setupAutoRegistrationInjectable);
|
||||||
|
|
||||||
@ -79,7 +71,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("requests version list from the api group from the initial apiBase", () => {
|
it("requests version list from the api group from the initial apiBase", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -92,8 +84,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when the version list from the api group resolves", () => {
|
describe("when the version list from the api group resolves", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io"],
|
["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io", JSON.stringify({
|
||||||
apiVersion: "v1",
|
apiVersion: "v1",
|
||||||
kind: "APIGroup",
|
kind: "APIGroup",
|
||||||
name: "networking.k8s.io",
|
name: "networking.k8s.io",
|
||||||
@ -117,7 +109,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("requests resources from the versioned api group from the initial apiBase", () => {
|
it("requests resources from the versioned api group from the initial apiBase", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -130,8 +122,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when resource request fufills with a resource", () => {
|
describe("when resource request fufills with a resource", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1", JSON.stringify({
|
||||||
resources: [{
|
resources: [{
|
||||||
name: "ingresses",
|
name: "ingresses",
|
||||||
}],
|
}],
|
||||||
@ -141,7 +133,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -159,8 +151,8 @@ describe("KubeApi", () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("registers the api with the changes info", () => {
|
it("api is retrievable with the new apiBase", () => {
|
||||||
expect(registerApiSpy).toBeCalledWith(ingressApi);
|
expect(apiManager.getApi("/apis/networking.k8s.io/v1/ingresses")).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when the request resolves with no data", () => {
|
describe("when the request resolves with no data", () => {
|
||||||
@ -168,8 +160,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -193,7 +185,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -208,8 +200,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -226,8 +218,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo", JSON.stringify({
|
||||||
apiVersion: "v1",
|
apiVersion: "v1",
|
||||||
kind: "Ingress",
|
kind: "Ingress",
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -260,7 +252,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -275,8 +267,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -292,8 +284,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when resource request fufills with no resource", () => {
|
describe("when resource request fufills with no resource", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1", JSON.stringify({
|
||||||
resources: [],
|
resources: [],
|
||||||
})),
|
})),
|
||||||
);
|
);
|
||||||
@ -301,7 +293,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("requests resources from the second versioned api group from the initial apiBase", () => {
|
it("requests resources from the second versioned api group from the initial apiBase", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -316,8 +308,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when resource request fufills with a resource", () => {
|
describe("when resource request fufills with a resource", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1", JSON.stringify({
|
||||||
resources: [{
|
resources: [{
|
||||||
name: "ingresses",
|
name: "ingresses",
|
||||||
}],
|
}],
|
||||||
@ -327,7 +319,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -345,8 +337,12 @@ describe("KubeApi", () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("registers the api with the changes info", () => {
|
it("api is retrievable with the new apiBase", () => {
|
||||||
expect(registerApiSpy).toBeCalledWith(ingressApi);
|
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", () => {
|
describe("when the request resolves with no data", () => {
|
||||||
@ -354,8 +350,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -379,7 +375,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -394,8 +390,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -412,8 +408,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({
|
||||||
apiVersion: "v1",
|
apiVersion: "v1",
|
||||||
kind: "Ingress",
|
kind: "Ingress",
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -446,7 +442,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -461,8 +457,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -480,8 +476,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when the version list from the api group resolves with no versions", () => {
|
describe("when the version list from the api group resolves with no versions", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["http://127.0.0.1:9999/api-kube/apis/networking.k8s.io"],
|
["https://127.0.0.1:12345/api-kube/apis/networking.k8s.io"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/networking.k8s.io", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/networking.k8s.io", JSON.stringify({
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"status": "Failure",
|
"status": "Failure",
|
||||||
"message": "the server could not find the requested resource",
|
"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", () => {
|
it("requests the resources from the base api url from the fallback api", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -514,8 +510,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when resource request fufills with a resource", () => {
|
describe("when resource request fufills with a resource", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["http://127.0.0.1:9999/api-kube/apis/extensions"],
|
["https://127.0.0.1:12345/api-kube/apis/extensions"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions", JSON.stringify({
|
||||||
apiVersion: "v1",
|
apiVersion: "v1",
|
||||||
kind: "APIGroup",
|
kind: "APIGroup",
|
||||||
name: "extensions",
|
name: "extensions",
|
||||||
@ -535,7 +531,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("requests resource versions from the versioned api group from the fallback apiBase", () => {
|
it("requests resource versions from the versioned api group from the fallback apiBase", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -548,8 +544,8 @@ describe("KubeApi", () => {
|
|||||||
describe("when the preferred version request resolves to v1beta1", () => {
|
describe("when the preferred version request resolves to v1beta1", () => {
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1"],
|
["https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions", JSON.stringify({
|
||||||
resources: [{
|
resources: [{
|
||||||
name: "ingresses",
|
name: "ingresses",
|
||||||
}],
|
}],
|
||||||
@ -559,7 +555,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -577,8 +573,8 @@ describe("KubeApi", () => {
|
|||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("registers the api with the changes info", () => {
|
it("api is retrievable with the new apiBase", () => {
|
||||||
expect(registerApiSpy).toBeCalledWith(ingressApi);
|
expect(apiManager.getApi("/apis/extensions/v1beta1/ingresses")).toBeDefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("when the request resolves with no data", () => {
|
describe("when the request resolves with no data", () => {
|
||||||
@ -586,8 +582,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -611,7 +607,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -626,8 +622,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
@ -644,8 +640,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo", JSON.stringify({
|
||||||
apiVersion: "v1beta1",
|
apiVersion: "v1beta1",
|
||||||
kind: "Ingress",
|
kind: "Ingress",
|
||||||
metadata: {
|
metadata: {
|
||||||
@ -678,7 +674,7 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
it("makes the request to get the resource", () => {
|
it("makes the request to get the resource", () => {
|
||||||
expect(fetchMock.mock.lastCall).toMatchObject([
|
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: {
|
headers: {
|
||||||
"content-type": "application/json",
|
"content-type": "application/json",
|
||||||
@ -693,8 +689,8 @@ describe("KubeApi", () => {
|
|||||||
|
|
||||||
beforeEach(async () => {
|
beforeEach(async () => {
|
||||||
await fetchMock.resolveSpecific(
|
await fetchMock.resolveSpecific(
|
||||||
["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"],
|
||||||
createMockResponseFromString("http://127.0.0.1:9999/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
createMockResponseFromString("https://127.0.0.1:12345/api-kube/apis/extensions/v1beta1/namespaces/default/ingresses/foo1", JSON.stringify({})),
|
||||||
);
|
);
|
||||||
result = await getCall;
|
result = await getCall;
|
||||||
});
|
});
|
||||||
|
|||||||
@ -5,11 +5,12 @@
|
|||||||
|
|
||||||
import type { KubeObjectStore } from "../kube-object.store";
|
import type { KubeObjectStore } from "../kube-object.store";
|
||||||
|
|
||||||
import { action, observable, makeObservable } from "mobx";
|
import type { IComputedValue } from "mobx";
|
||||||
import { autoBind, isDefined, iter } from "../../utils";
|
import { autorun, action, observable } from "mobx";
|
||||||
import type { KubeApi } from "../kube-api";
|
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 { parseKubeApi, createKubeApiURL } from "../kube-api-parse";
|
||||||
|
import { chain, find } from "../../utils/iter";
|
||||||
|
|
||||||
export type RegisterableStore<Store> = Store extends KubeObjectStore<any, any, any>
|
export type RegisterableStore<Store> = Store extends KubeObjectStore<any, any, any>
|
||||||
? Store
|
? Store
|
||||||
@ -21,25 +22,53 @@ export type KubeObjectStoreFrom<Api> = Api extends KubeApi<infer KubeObj, infer
|
|||||||
? KubeObjectStore<KubeObj, Api, ApiData>
|
? KubeObjectStore<KubeObj, Api, ApiData>
|
||||||
: never;
|
: never;
|
||||||
|
|
||||||
|
export type FindApiCallback = (api: KubeApi<KubeObject>) => boolean;
|
||||||
|
|
||||||
|
interface Dependencies {
|
||||||
|
readonly apis: IComputedValue<KubeApi[]>;
|
||||||
|
readonly stores: IComputedValue<KubeObjectStore[]>;
|
||||||
|
}
|
||||||
|
|
||||||
export class ApiManager {
|
export class ApiManager {
|
||||||
|
private readonly externalApis = observable.array<KubeApi>();
|
||||||
|
private readonly externalStores = observable.array<KubeObjectStore>();
|
||||||
|
|
||||||
private readonly apis = observable.map<string, KubeApi>();
|
private readonly apis = observable.map<string, KubeApi>();
|
||||||
private readonly stores = observable.map<string, KubeObjectStore>();
|
|
||||||
|
|
||||||
constructor() {
|
constructor(private readonly dependencies: Dependencies) {
|
||||||
makeObservable(this);
|
// NOTE: this is done to preserve the old behaviour of an API being discoverable using all previous apiBases
|
||||||
autoBind(this);
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
getApi(pathOrCallback: string | ((api: KubeApi<KubeObject>) => boolean)) {
|
for (const api of removedApis) {
|
||||||
if (typeof pathOrCallback === "string") {
|
for (const [apiBase, storedApi] of this.apis) {
|
||||||
return this.apis.get(pathOrCallback) || this.apis.get(parseKubeApi(pathOrCallback).apiBase);
|
if (storedApi === api) {
|
||||||
|
this.apis.delete(apiBase);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return iter.find(this.apis.values(), pathOrCallback ?? (() => true));
|
getApi(pathOrCallback: string | FindApiCallback) {
|
||||||
|
if (typeof pathOrCallback === "function") {
|
||||||
|
return find(this.apis.values(), pathOrCallback);
|
||||||
|
}
|
||||||
|
|
||||||
|
const { apiBase } = parseKubeApi(pathOrCallback);
|
||||||
|
|
||||||
|
return this.apis.get(apiBase);
|
||||||
}
|
}
|
||||||
|
|
||||||
getApiByKind(kind: string, apiVersion: string) {
|
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>(api: RegisterableApi<Api>): void;
|
registerApi<Api>(api: RegisterableApi<Api>): void;
|
||||||
@ -47,45 +76,23 @@ export class ApiManager {
|
|||||||
* @deprecated Just register the `api` by itself
|
* @deprecated Just register the `api` by itself
|
||||||
*/
|
*/
|
||||||
registerApi<Api>(apiBase: string, api: RegisterableApi<Api>): void;
|
registerApi<Api>(apiBase: string, api: RegisterableApi<Api>): void;
|
||||||
registerApi<Api>(apiBaseRaw: string | RegisterableApi<Api>, apiRaw?: RegisterableApi<Api>) {
|
registerApi<Api>(...args: [RegisterableApi<Api>] | [string, RegisterableApi<Api>]) {
|
||||||
const api = typeof apiBaseRaw === "string"
|
if (args.length === 1) {
|
||||||
? apiRaw
|
this.externalApis.push(args[0]);
|
||||||
: apiBaseRaw;
|
} else {
|
||||||
|
this.externalApis.push(args[1]);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected resolveApi(api: undefined | string | KubeApi): KubeApi | undefined {
|
unregisterApi(apiOrBase: string | KubeApi<KubeObject>) {
|
||||||
if (!api) {
|
if (typeof apiOrBase === "string") {
|
||||||
return undefined;
|
const api = this.externalApis.find(api => api.apiBase === apiOrBase);
|
||||||
|
|
||||||
|
if (api) {
|
||||||
|
this.externalApis.remove(api);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
if (typeof api === "string") {
|
this.unregisterApi(apiOrBase.apiBase);
|
||||||
return this.getApi(api);
|
|
||||||
}
|
|
||||||
|
|
||||||
return api;
|
|
||||||
}
|
|
||||||
|
|
||||||
unregisterApi(api: string | KubeApi<KubeObject>) {
|
|
||||||
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]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -93,15 +100,11 @@ export class ApiManager {
|
|||||||
/**
|
/**
|
||||||
* @deprecated KubeObjectStore's should only every be about a single KubeApi type
|
* @deprecated KubeObjectStore's should only every be about a single KubeApi type
|
||||||
*/
|
*/
|
||||||
registerStore<KubeObj extends KubeObject>(store: KubeObjectStore<KubeObj, KubeApi<KubeObj>, KubeJsonApiDataFor<KubeObj>>, apis: KubeApi<KubeObj>[]): void;
|
registerStore<KubeObj>(store: RegisterableStore<KubeObj>, apis: KubeApi<KubeObject>[]): void;
|
||||||
|
|
||||||
@action
|
@action
|
||||||
registerStore<KubeObj extends KubeObject>(store: KubeObjectStore<KubeObj, KubeApi<KubeObj>, KubeJsonApiDataFor<KubeObj>>, apis: KubeApi<KubeObj>[] = [store.api]): void {
|
registerStore<KubeObj>(store: RegisterableStore<KubeObj>): void {
|
||||||
for (const api of apis.filter(isDefined)) {
|
this.externalStores.push(store);
|
||||||
if (api.apiBase) {
|
|
||||||
this.stores.set(api.apiBase, store as never);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getStore(api: string | undefined): KubeObjectStore | undefined;
|
getStore(api: string | undefined): KubeObjectStore | undefined;
|
||||||
@ -110,16 +113,25 @@ export class ApiManager {
|
|||||||
* @deprecated use an actual cast instead of hiding it with this unused type param
|
* @deprecated use an actual cast instead of hiding it with this unused type param
|
||||||
*/
|
*/
|
||||||
getStore<Store extends KubeObjectStore>(api: string | KubeApi): Store | undefined ;
|
getStore<Store extends KubeObjectStore>(api: string | KubeApi): Store | undefined ;
|
||||||
getStore(api: string | KubeApi | undefined): KubeObjectStore | undefined {
|
getStore(apiOrBase: string | KubeApi | undefined): KubeObjectStore | undefined {
|
||||||
const { apiBase } = this.resolveApi(api) ?? {};
|
if (!apiOrBase) {
|
||||||
|
return undefined;
|
||||||
if (apiBase) {
|
|
||||||
return this.stores.get(apiBase);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const { apiBase } = typeof apiOrBase === "string"
|
||||||
|
? parseKubeApi(apiOrBase)
|
||||||
|
: apiOrBase;
|
||||||
|
const api = this.getApi(apiBase);
|
||||||
|
|
||||||
|
if (!api) {
|
||||||
return undefined;
|
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 {
|
lookupApiLink(ref: ObjectReference, parentObject?: KubeObject): string {
|
||||||
const {
|
const {
|
||||||
kind, apiVersion = "v1", name,
|
kind, apiVersion = "v1", name,
|
||||||
@ -132,7 +144,7 @@ export class ApiManager {
|
|||||||
const api = this.getApi(api => api.kind === kind && api.apiVersionWithGroup == apiVersion);
|
const api = this.getApi(api => api.kind === kind && api.apiVersionWithGroup == apiVersion);
|
||||||
|
|
||||||
if (api) {
|
if (api) {
|
||||||
return api.getUrl({ namespace, name });
|
return api.formatUrlForNotListing({ namespace, name });
|
||||||
}
|
}
|
||||||
|
|
||||||
// lookup api by generated resource link
|
// lookup api by generated resource link
|
||||||
@ -151,7 +163,7 @@ export class ApiManager {
|
|||||||
const apiByKind = this.getApi(api => api.kind === kind);
|
const apiByKind = this.getApi(api => api.kind === kind);
|
||||||
|
|
||||||
if (apiByKind) {
|
if (apiByKind) {
|
||||||
return apiByKind.getUrl({ name, namespace });
|
return apiByKind.formatUrlForNotListing({ name, namespace });
|
||||||
}
|
}
|
||||||
|
|
||||||
// otherwise generate link with default prefix
|
// otherwise generate link with default prefix
|
||||||
|
|||||||
10
src/common/k8s-api/api-manager/kube-object-store-token.ts
Normal file
10
src/common/k8s-api/api-manager/kube-object-store-token.ts
Normal file
@ -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<KubeObjectStore<any, any, any>>({
|
||||||
|
id: "kube-object-store-token",
|
||||||
|
});
|
||||||
@ -2,29 +2,28 @@
|
|||||||
* Copyright (c) OpenLens Authors. All rights reserved.
|
* Copyright (c) OpenLens Authors. All rights reserved.
|
||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* 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 { storesAndApisCanBeCreatedInjectionToken } from "../stores-apis-can-be-created.token";
|
||||||
import type { KubeObjectStore } from "../kube-object.store";
|
|
||||||
import { ApiManager } from "./api-manager";
|
import { ApiManager } from "./api-manager";
|
||||||
|
import { computedInjectManyInjectable } from "@ogre-tools/injectable-extension-for-mobx";
|
||||||
export const kubeObjectStoreInjectionToken = getInjectionToken<KubeObjectStore<any, any, any>>({
|
import { kubeObjectStoreInjectionToken } from "./kube-object-store-token";
|
||||||
id: "kube-object-store-token",
|
import { kubeApiInjectionToken } from "../kube-api/kube-api-injection-token";
|
||||||
});
|
import { computed } from "mobx";
|
||||||
|
|
||||||
const apiManagerInjectable = getInjectable({
|
const apiManagerInjectable = getInjectable({
|
||||||
id: "api-manager",
|
id: "api-manager",
|
||||||
instantiate: (di) => {
|
instantiate: (di) => {
|
||||||
const apiManager = new ApiManager();
|
const computedInjectMany = di.inject(computedInjectManyInjectable);
|
||||||
|
const storesAndApisCanBeCreated = di.inject(storesAndApisCanBeCreatedInjectionToken);
|
||||||
|
|
||||||
if (di.inject(storesAndApisCanBeCreatedInjectionToken)) {
|
return new ApiManager({
|
||||||
const stores = di.injectMany(kubeObjectStoreInjectionToken);
|
apis: storesAndApisCanBeCreated
|
||||||
|
? computedInjectMany(kubeApiInjectionToken)
|
||||||
for (const store of stores) {
|
: computed(() => []),
|
||||||
apiManager.registerStore(store);
|
stores: storesAndApisCanBeCreated
|
||||||
}
|
? computedInjectMany(kubeObjectStoreInjectionToken)
|
||||||
}
|
: computed(() => []),
|
||||||
|
});
|
||||||
return apiManager;
|
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -20,10 +20,9 @@ import type { Patch } from "rfc6902";
|
|||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import type { PartialDeep } from "type-fest";
|
import type { PartialDeep } from "type-fest";
|
||||||
import type { Logger } from "../logger";
|
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 type AbortController from "abort-controller";
|
||||||
import { matches } from "lodash/fp";
|
import { matches } from "lodash/fp";
|
||||||
|
import { makeObservable, observable } from "mobx";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The options used for creating a `KubeApi`
|
* The options used for creating a `KubeApi`
|
||||||
@ -206,30 +205,6 @@ export interface DeleteResourceDescriptor extends ResourceDescriptor {
|
|||||||
propagationPolicy?: PropagationPolicy;
|
propagationPolicy?: PropagationPolicy;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @deprecated In the new extension API, don't expose `KubeApi`'s constructor
|
|
||||||
*/
|
|
||||||
function legacyRegisterApi(api: KubeApi<any, any>): 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 {
|
export interface KubeApiDependencies {
|
||||||
readonly logger: Logger;
|
readonly logger: Logger;
|
||||||
readonly maybeKubeApi: KubeJsonApi | undefined;
|
readonly maybeKubeApi: KubeJsonApi | undefined;
|
||||||
@ -241,7 +216,9 @@ export class KubeApi<
|
|||||||
> {
|
> {
|
||||||
readonly kind: string;
|
readonly kind: string;
|
||||||
readonly apiVersion: string;
|
readonly apiVersion: string;
|
||||||
apiBase: string;
|
|
||||||
|
@observable apiBase: string;
|
||||||
|
|
||||||
apiPrefix: string;
|
apiPrefix: string;
|
||||||
apiGroup: string;
|
apiGroup: string;
|
||||||
apiVersionPreferred: string | undefined;
|
apiVersionPreferred: string | undefined;
|
||||||
@ -288,7 +265,7 @@ export class KubeApi<
|
|||||||
this.apiResource = resource;
|
this.apiResource = resource;
|
||||||
this.request = request;
|
this.request = request;
|
||||||
this.objectConstructor = objectConstructor;
|
this.objectConstructor = objectConstructor;
|
||||||
legacyRegisterApi(this);
|
makeObservable(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
get apiVersionWithGroup() {
|
get apiVersionWithGroup() {
|
||||||
@ -347,7 +324,6 @@ export class KubeApi<
|
|||||||
this.apiGroup = apiGroup;
|
this.apiGroup = apiGroup;
|
||||||
this.apiVersionPreferred = apiVersionPreferred;
|
this.apiVersionPreferred = apiVersionPreferred;
|
||||||
this.apiBase = this.computeApiBase();
|
this.apiBase = this.computeApiBase();
|
||||||
legacyRegisterApi(this);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -3,7 +3,7 @@
|
|||||||
* Licensed under MIT License. See LICENSE in root directory for more information.
|
* 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("iter", () => {
|
||||||
describe("reduce", () => {
|
describe("reduce", () => {
|
||||||
@ -39,4 +39,30 @@ describe("iter", () => {
|
|||||||
expect(nth(["a", "b"], 0)).toBe("a");
|
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 });
|
||||||
|
});
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
@ -12,6 +12,7 @@ interface Iterator<T> extends Iterable<T> {
|
|||||||
collect<U>(fn: (values: Iterable<T>) => U): U;
|
collect<U>(fn: (values: Iterable<T>) => U): U;
|
||||||
map<U>(fn: (val: T) => U): Iterator<U>;
|
map<U>(fn: (val: T) => U): Iterator<U>;
|
||||||
flatMap<U>(fn: (val: T) => U[]): Iterator<U>;
|
flatMap<U>(fn: (val: T) => U[]): Iterator<U>;
|
||||||
|
concat(src2: IterableIterator<T>): Iterator<T>;
|
||||||
join(sep?: string): string;
|
join(sep?: string): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -24,6 +25,7 @@ export function chain<T>(src: IterableIterator<T>): Iterator<T> {
|
|||||||
find: (fn) => find(src, fn),
|
find: (fn) => find(src, fn),
|
||||||
join: (sep) => join(src, sep),
|
join: (sep) => join(src, sep),
|
||||||
collect: (fn) => fn(src),
|
collect: (fn) => fn(src),
|
||||||
|
concat: (src2) => chain(concat(src, src2)),
|
||||||
[Symbol.iterator]: () => src,
|
[Symbol.iterator]: () => src,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@ -236,3 +238,11 @@ export function every<T>(src: Iterable<T>, fn: (val: T) => any): boolean {
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function* concat<T>(...sources: IterableIterator<T>[]): IterableIterator<T> {
|
||||||
|
for (const source of sources) {
|
||||||
|
for (const val of source) {
|
||||||
|
yield val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -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 { 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 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 { 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 apiManager = asLegacyGlobalForExtensionApi(apiManagerInjectable);
|
||||||
export const forCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForClusterInjectable);
|
export const forCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForClusterInjectable);
|
||||||
export const forRemoteCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForRemoteClusterInjectable);
|
export const forRemoteCluster = asLegacyGlobalFunctionForExtensionApi(createKubeApiForRemoteClusterInjectable);
|
||||||
|
export const createResourceStack = asLegacyGlobalFunctionForExtensionApi(createResourceStackInjectable);
|
||||||
|
|
||||||
const getKubeApiDeps = (): KubeApiDependencies => {
|
const getKubeApiDeps = (): KubeApiDependencies => {
|
||||||
const di = getLegacyGlobalDiForExtensionApi();
|
const di = getLegacyGlobalDiForExtensionApi();
|
||||||
@ -45,7 +47,16 @@ function KubeApiCstr<
|
|||||||
Object extends KubeObject = KubeObject,
|
Object extends KubeObject = KubeObject,
|
||||||
Data extends KubeJsonApiDataFor<Object> = KubeJsonApiDataFor<Object>,
|
Data extends KubeJsonApiDataFor<Object> = KubeJsonApiDataFor<Object>,
|
||||||
>(opts: KubeApiOptions<Object, Data>) {
|
>(opts: KubeApiOptions<Object, Data>) {
|
||||||
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<
|
export const KubeApi = KubeApiCstr as unknown as new<
|
||||||
@ -53,8 +64,6 @@ export const KubeApi = KubeApiCstr as unknown as new<
|
|||||||
Data extends KubeJsonApiDataFor<Object> = KubeJsonApiDataFor<Object>,
|
Data extends KubeJsonApiDataFor<Object> = KubeJsonApiDataFor<Object>,
|
||||||
>(opts: KubeApiOptions<Object, Data>) => InternalKubeApi<Object, Data>;
|
>(opts: KubeApiOptions<Object, Data>) => InternalKubeApi<Object, Data>;
|
||||||
|
|
||||||
export const createResourceStack = asLegacyGlobalFunctionForExtensionApi(createResourceStackInjectable);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Switch to using `Common.createResourceStack` instead
|
* @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()`
|
// NOTE: these *Constructor functions MUST be `function` to work with `new X()`
|
||||||
function PodsApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) {
|
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;
|
export const PodsApi = PodsApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => PodApi;
|
||||||
|
|
||||||
function NodesApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) {
|
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;
|
export const NodesApi = NodesApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => NodeApi;
|
||||||
|
|
||||||
function DeploymentApiConstructor(opts?: DerivedKubeApiOptions) {
|
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;
|
export const DeploymentApi = DeploymentApiConstructor as unknown as new (opts?: DerivedKubeApiOptions) => InternalDeploymentApi;
|
||||||
|
|
||||||
function IngressApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) {
|
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;
|
export const IngressApi = IngressApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => InternalIngressApi;
|
||||||
|
|
||||||
function PersistentVolumeClaimsApiConstructor(opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) {
|
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;
|
export const PersistentVolumeClaimsApi = PersistentVolumeClaimsApiConstructor as unknown as new (opts?: DerivedKubeApiOptions & IgnoredKubeApiOptions) => PersistentVolumeClaimApi;
|
||||||
|
|||||||
@ -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 { KubeObjectStore } from "../../../../common/k8s-api/kube-object.store";
|
||||||
import type { KubeApi } from "../../../../common/k8s-api/kube-api";
|
import type { KubeApi } from "../../../../common/k8s-api/kube-api";
|
||||||
import showDetailsInjectable from "../../../../renderer/components/kube-detail-params/show-details.injectable";
|
import showDetailsInjectable from "../../../../renderer/components/kube-detail-params/show-details.injectable";
|
||||||
|
import assert from "assert";
|
||||||
|
|
||||||
describe("reactively hide kube object detail item", () => {
|
describe("reactively hide kube object detail item", () => {
|
||||||
let builder: ApplicationBuilder;
|
let builder: ApplicationBuilder;
|
||||||
@ -89,6 +90,10 @@ describe("reactively hide kube object detail item", () => {
|
|||||||
runInAction(() => {
|
runInAction(() => {
|
||||||
someObservable.set(true);
|
someObservable.set(true);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const apiManager = builder.applicationWindow.only.di.inject(apiManagerInjectable);
|
||||||
|
|
||||||
|
assert(apiManager.getStore("/apis/some-api-version/some-kind"));
|
||||||
});
|
});
|
||||||
|
|
||||||
it("renders", () => {
|
it("renders", () => {
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import type { ClusterOverviewStorageState } from "./cluster-overview-store";
|
import type { ClusterOverviewStorageState } from "./cluster-overview-store";
|
||||||
import { ClusterOverviewStore, MetricNodeRole, MetricType } from "./cluster-overview-store";
|
import { ClusterOverviewStore, MetricNodeRole, MetricType } from "./cluster-overview-store";
|
||||||
import createStorageInjectable from "../../../utils/create-storage/create-storage.injectable";
|
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 clusterApiInjectable from "../../../../common/k8s-api/endpoints/cluster.api.injectable";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable";
|
import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 horizontalPodAutoscalerApiInjectable from "../../../common/k8s-api/endpoints/horizontal-pod-autoscaler.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 leaseApiInjectable from "../../../common/k8s-api/endpoints/lease.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 limitRangeApiInjectable from "../../../common/k8s-api/endpoints/limit-range.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 configMapApiInjectable from "../../../common/k8s-api/endpoints/config-map.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 podDisruptionBudgetApiInjectable from "../../../common/k8s-api/endpoints/pod-disruption-budget.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 priorityClassApiInjectable from "../../../common/k8s-api/endpoints/priority-class.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 resourceQuotaApiInjectable from "../../../common/k8s-api/endpoints/resource-quota.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 runtimeClassApiInjectable from "../../../common/k8s-api/endpoints/runtime-class.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 secretApiInjectable from "../../../common/k8s-api/endpoints/secret.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import autoRegistrationEmitterInjectable from "../../../common/k8s-api/api-manager/auto-registration-emitter.injectable";
|
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 customResourceDefinitionApiInjectable from "../../../common/k8s-api/endpoints/custom-resource-definition.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import getPodByIdInjectable from "../+workloads-pods/get-pod-by-id.injectable";
|
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 kubeEventApiInjectable from "../../../common/k8s-api/endpoints/events.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import { NamespaceStore } from "./store";
|
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 createStorageInjectable from "../../utils/create-storage/create-storage.injectable";
|
||||||
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
|
import namespaceApiInjectable from "../../../common/k8s-api/endpoints/namespace.api.injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 endpointsApiInjectable from "../../../common/k8s-api/endpoints/endpoint.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,10 +4,9 @@
|
|||||||
*/
|
*/
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
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 ingressClassApiInjectable from "../../../common/k8s-api/endpoints/ingress-class.api.injectable";
|
||||||
import { IngressClassStore } from "./ingress-class-store";
|
import { IngressClassStore } from "./ingress-class-store";
|
||||||
|
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable";
|
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 ingressApiInjectable from "../../../common/k8s-api/endpoints/ingress.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 networkPolicyApiInjectable from "../../../common/k8s-api/endpoints/network-policy.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 serviceApiInjectable from "../../../common/k8s-api/endpoints/service.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 nodeApiInjectable from "../../../common/k8s-api/endpoints/node.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 podSecurityPolicyApiInjectable from "../../../common/k8s-api/endpoints/pod-security-policy.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import getPersistentVolumesByStorageClassInjectable from "../+storage-volumes/get-persisten-volumes-by-storage-class.injectable";
|
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 storageClassApiInjectable from "../../../common/k8s-api/endpoints/storage-class.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 persistentVolumeClaimApiInjectable from "../../../common/k8s-api/endpoints/persistent-volume-claim.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 persistentVolumeApiInjectable from "../../../common/k8s-api/endpoints/persistent-volume.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import { storesAndApisCanBeCreatedInjectionToken } from "../../../../common/k8s-api/stores-apis-can-be-created.token";
|
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 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 { ClusterRoleBindingStore } from "./store";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import { storesAndApisCanBeCreatedInjectionToken } from "../../../../common/k8s-api/stores-apis-can-be-created.token";
|
import { storesAndApisCanBeCreatedInjectionToken } from "../../../../common/k8s-api/stores-apis-can-be-created.token";
|
||||||
import clusterRoleApiInjectable from "../../../../common/k8s-api/endpoints/cluster-role.api.injectable";
|
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 { ClusterRoleStore } from "./store";
|
||||||
import clusterFrameContextForClusterScopedResourcesInjectable from "../../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
import clusterFrameContextForClusterScopedResourcesInjectable from "../../../cluster-frame-context/for-cluster-scoped-resources.injectable";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
|
|||||||
@ -4,7 +4,7 @@
|
|||||||
*/
|
*/
|
||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
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 roleBindingApiInjectable from "../../../../common/k8s-api/endpoints/role-binding.api.injectable";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import roleApiInjectable from "../../../../common/k8s-api/endpoints/role.api.injectable";
|
import roleApiInjectable from "../../../../common/k8s-api/endpoints/role.api.injectable";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.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 { RoleStore } from "./store";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import serviceAccountApiInjectable from "../../../../common/k8s-api/endpoints/service-account.api.injectable";
|
import serviceAccountApiInjectable from "../../../../common/k8s-api/endpoints/service-account.api.injectable";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../../stores-apis-can-be-created.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 { ServiceAccountStore } from "./store";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
import loggerInjectable from "../../../../common/logger.injectable";
|
import loggerInjectable from "../../../../common/logger.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import getJobsByOwnerInjectable from "../+workloads-jobs/get-jobs-by-owner.injectable";
|
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 cronJobApiInjectable from "../../../common/k8s-api/endpoints/cron-job.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import assert from "assert";
|
|||||||
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
import daemonSetApiInjectable from "../../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
import daemonSetApiInjectable from "../../../common/k8s-api/endpoints/daemon-set.api.injectable";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.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 { DaemonSetStore } from "./store";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import podStoreInjectable from "../+workloads-pods/store.injectable";
|
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 { storesAndApisCanBeCreatedInjectionToken } from "../../../common/k8s-api/stores-apis-can-be-created.token";
|
||||||
import deploymentApiInjectable from "../../../common/k8s-api/endpoints/deployment.api.injectable";
|
import deploymentApiInjectable from "../../../common/k8s-api/endpoints/deployment.api.injectable";
|
||||||
import { DeploymentStore } from "./store";
|
import { DeploymentStore } from "./store";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
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 jobApiInjectable from "../../../common/k8s-api/endpoints/job.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -6,7 +6,7 @@ import { getInjectable } from "@ogre-tools/injectable";
|
|||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import podApiInjectable from "../../../common/k8s-api/endpoints/pod.api.injectable";
|
import podApiInjectable from "../../../common/k8s-api/endpoints/pod.api.injectable";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.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 { PodStore } from "./store";
|
||||||
import podMetricsApiInjectable from "../../../common/k8s-api/endpoints/pod-metrics.api.injectable";
|
import podMetricsApiInjectable from "../../../common/k8s-api/endpoints/pod-metrics.api.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import assert from "assert";
|
|||||||
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
||||||
import replicaSetApiInjectable from "../../../common/k8s-api/endpoints/replica-set.api.injectable";
|
import replicaSetApiInjectable from "../../../common/k8s-api/endpoints/replica-set.api.injectable";
|
||||||
import storesAndApisCanBeCreatedInjectable from "../../stores-apis-can-be-created.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 { ReplicaSetStore } from "./store";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
import { getInjectable } from "@ogre-tools/injectable";
|
import { getInjectable } from "@ogre-tools/injectable";
|
||||||
import assert from "assert";
|
import assert from "assert";
|
||||||
import getPodsByOwnerIdInjectable from "../+workloads-pods/get-pods-by-owner-id.injectable";
|
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 statefulSetApiInjectable from "../../../common/k8s-api/endpoints/stateful-set.api.injectable";
|
||||||
import loggerInjectable from "../../../common/logger.injectable";
|
import loggerInjectable from "../../../common/logger.injectable";
|
||||||
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
import clusterFrameContextForNamespacedResourcesInjectable from "../../cluster-frame-context/for-namespaced-resources.injectable";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user